Schwerer, unspezifischer Fehler

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2, 3, 4  Weiter

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.

 

Omenaton_2

Betreff: Schwerer, unspezifischer Fehler

BeitragDo, Nov 12, 2009 13:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo !

Ich habe seit gestern ein noch nie erlebtes, Riesenproblem mit meinem Code (das neue Weltraum Rollenspiel). Das läßt in mir meine Programmierer-Urängste vor der drohenden "Begrenztheit" wachwerden.

Ich habe selbstverständlich Debug Modus an. Wenn ich versuche den Code zu kompilieren und auszuführen, bricht das Kompilieren so bei etwa 1/3 des ganzen "wortlos" ab. Ohne irgendeine Fehlermeldung. Ohne, daß der Compiler zu der Zeile mit dem Fehler hinspringen würde wie es sonst bei Fehlern sonst üblich ist.

Ich habe durch experimentieren auf die Zeile genau die Stelle lokalisiert, wo der Code noch läuft und ab welcher Zeile (wenn ich die hinzufüge) der Code nicht mehr kompiliert.

Was da gemacht wird, ist nichts anderes einer Variable einen Wert zuzuweisen :
STOBP_SecW_Mesh_2_Name$ = StatObj\SecW_Mesh_2_Name$
In der Zeile davor, in der noch alles ok ist wird das Selbe gemacht nur die Variable heißt da Mesh 1 und nicht 2.
Es ist ausgeschlossen, daß da ein logischer Programmfehler vorliegt.
Ich habe auch ausprobiert, daß ich stat dieser Zeile, was ganz anderes eintippe, wie :
If a9 = 1 Then
a9 = a9 + 1
EndIf
Der Fehler tritt auch dann auf. Es scheint egal zu sein, was da steht !

Nun, meine Befürchtung ist, daß der Compiler überfordert ist. Enweder, von der schieren Masse an Variablenzuweisungen die an der Stelle gemacht werden (ca 400 Variablen bekommen da Werte zugewiesen) ODER es gibt vielleicht eine maximale Code File Größe selbst dann, wenn man Includes benutzt (ja, dieser Fehler ist in einem Include, trat aber auch schon auf bevor ich es ausgelagert habe). Oder es gibt eventuell eine maximale Anzahl von unterschiedlichen Variablen, die der Compiler akzeptieren kann ?

Mir ist es bewußt, daß der standard BlitzBasic Compiler nur maximal 1 MB große Codes bearbeiten kann. Dies habe ich schon bei Vulpec Mutations erreicht gehabt. Aber ich lagere Code Teile in Includes aus und so konnte ich bis heute noch locker unter dieser Grenze bleiben . Zur Zeit ist mein Hauptcode 860 kb groß und keine der Includes alleine ist größer als 536 kb.
Wenn ich die Code File Größen von Hauptcode UND Includes alle zusammenaddiere, dann kommt das auf 2846 kb.
Kann das sein, daß das für den Compiler zuviel ist ?

Weiß jemand dazu etwas Bestimmtes ?

Damals, vor vielen Jahren, als ich auf die Begrenzug der Code Länge auf 1 MB in dem offiziellen BlitzBasic Editor / Compiler gestoßen bin habe ich gelesen, daß es auch inoffizielle Editoren gibt, die mehr als 1 MB können. Ich habe damals Eines auch kurz getestet und es ging, nur gefiel mir der Editor nicht so gut wie der Original und deshalb benutze ich immer den original BlitzBasic Editor und würde es gerne weiterhin tun.
Eventuell müßte ich meinen Code in einem anderen Editor/Compiler einlesen und testen, ob es dort läuft. Das wäre aufschlußreich. Kann mir jemand einen guten Editor/Compiler empfehlen ?



Um Fragen zuvorzubeugen, beschreibe ich noch kurz was ich da mache und warum (wobei ich denke, daß das egal ist).

Wenn der Spieler ein gegnerisches Raumschiff zerstört, dann hinterläßt dies meistens einen Loot-Container. Einen Behälter, den der Spieler öffnen und dann dessen Inhalt zu sich nehmen kann. Wie in allen MMORPGs, wie in WoW auch.
Bisher habe ich das so gemacht, daß immer nach der Zerstörung eines Schiffes wird es ermittelt, ob da ein Lootcontainer sein soll und wenn ja womit das gefüllt werden soll. Wenn ja, dann wird ein neuer Static Object (so nenne ich etwas irreführend den Haupt Objekt Type für bewegliche, meist intelligente Objekte in meinem Code) erschaffen und seine Werte aus einer Bibliothek Datei von der Festplatte eingelesen. Auch die dazugehörige Meshes werden eingelesen und zurecht geformt. Das funktioniert auch schon seit lange tadellos.

Ich will jedoch vermeiden, daß Mitten im Spiel überhaupt irgendetwas von der Festplatte aus nachgeladen werden wird. Nur in Menüs oder wenn sonstige Fenster (Inventory) auf sind, also wenn der Spieler sich nicht in der Aktion befindet sollen Daten nachgeladen werden.
Deswegen verändere ich jetzt, wie der Lootcontainer erschaffen werden soll.

Mein Plan ist, daß ich den Lootcontainer als Objekt Type und als Mesh schon beim Spiel Start (wenn die Sektor erschaffen wird) voraus einlade. Ich mache alles mit HideEntity unsichtbar und setzen den LifeState Wert des Types auf 4, was bei mir "Library Object" entspricht. Objekte mit diesem Life State sollen dann nirgendwo in Code berücksichtigt werden, sie sind praktisch tot, nicht vorhanden. Sie stören nicht.

Wenn dann nach Zerstörung eines Gegners ein Lootcontainer erschaffen werden soll, dann soll folgendes geschehen :

1. Ich springe den StaticObject Type des unsichtbaren Library-Lootcontainers an. (ich mache nicht diesen unsichtbaren Objekt zum neuen Container, sondern lasse das weiterhin als unsichtbares Muster liegen, ich übernehme nur seine Werte).

2. Ich kopiere seine ca 400 Variablen (die Type Felder sind) in einen gewöhnlichen, temporäreren Variablen Set (das sind keine Type Felder, weil sie nur als eine enzige Instanz existieren müssen).

3. Ich kopiere die Meshes mit CopyMesh oder CopyEntity (das wird sich noch dem Test erweisen) ebenfalls in eine temporäre Mesh Variable.

4. Dann erschaffe ich den neuen Static Object Type Eintrag. Dies bekommt die Werte, die ich vorhin in dem temporären Variablenset abgelegt habe zugewiesen.

5. Dann kopiere ich (CopyMesh) die Meshes aus dem temporären Meshes zu den neuen, zu dem neuen Container Type zugehörigen Mesh-Variablen.

Das müßte so gehen.
Es gäbe noch 2-3 andere Lösungswege um das zu tun und ich habe lange überlegt, welcher Weg am Günstigsten wäre und bin schließlich zu diesem Weg gekommen.

Der Fehler tritt in dem Codeteil wo Punkt 2 und 4, also das Kopieren der Variablenwerten auf. Da ist nichts Kompliziertes drin, nur simples Werte zuweisen. Ich konnte auch keinen Syntax Fehler finden.
 

Krischan

BeitragDo, Nov 12, 2009 14:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Kann mir jemand einen guten Editor/Compiler empfehlen?


Ich nehme nur noch IDEal, vor allem bei grösseren Projekten "ideal" um ein Riesenprojekt in kleinere Dateien zu splitten und trotzdem die Übersicht über alles zu haben (neben vielen weiteren Annehmlichkeiten die die Original IDE einfach nicht bietet):

http://www.fungamesfactory.com
 

Omenaton_2

BeitragDo, Nov 12, 2009 14:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Krischan hat Folgendes geschrieben:
Zitat:
Kann mir jemand einen guten Editor/Compiler empfehlen?


Ich nehme nur noch IDEal, vor allem bei grösseren Projekten "ideal" um ein Riesenprojekt in kleinere Dateien zu splitten und trotzdem die Übersicht über alles zu haben (neben vielen weiteren Annehmlichkeiten die die Original IDE einfach nicht bietet):

http://www.fungamesfactory.com


Ja, ich bin auch gerade auf die Website vono IDEal Editor gestoßen und überlege es mir zu installieren.
Ist es aber nicht verbuggt ? kann man sich gut darauf verlassen ? Hast du nicht auch irgendwas Negatives darüber zu berichten ?

Übrigens ich komme immer mehr zu der Vermutung, daß so wie der Blitz Editor nur 1 MB Source Code in einem Stück bearbeiten kann, so kann es sein, daß es bei ca 2 MB Source Code auch bei Includes Probleme macht.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Nov 12, 2009 14:43
Antworten mit Zitat
Benutzer-Profile anzeigen
IDEal ist nur in der hinsicht verbuggt, indem du ausklappbare Menüs einklappst und direkt vor oder hinter diesen Zeichen rumeditierst. Die Folge: Es werden unsichtbare Steuerzeichen entfernt, was den weiteren Verlauf beim editieren sehr erschwert bishin unmöglich macht. Lösung: Immer direkt vor oder nach einem eingeklappten Menü dieses entweder vorher ausklappen oder erst gar nicht diesen Bereich bearbeiten.

Ansonsten ist es Top.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

Krischan

BeitragDo, Nov 12, 2009 15:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja aber über so Kleinigkeiten kann man hinwegsehen. Alleine die Funktion Compile > Review Declarations ist einen Blick wert um überflüssige Variablen/Funktionen zu eliminieren. Die alte Blitz-IDE vermisse ich überhaupt nicht mehr. IDEal wird zwar seit 2007 anscheinend nicht mehr weiterentwickelt, läuft aber überwiegend stabil.

Und versuche am Besten gleich, Dich mit dem Projektmodus vertraut zu machen (.ipf Datei).
 

da_poller

BeitragDo, Nov 12, 2009 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich nutze fast seit anfang am ideal. Nicht du wegen dem klappbaren funktionen oder der automatischen einrückung. Vorallem die einfache bedienung und der projekt teil finde ich einfach klasse. Bisher ist mir ideal nicht einmal abgestürzt oder hatte einen fehler.
 

Omenaton_2

BeitragDo, Nov 12, 2009 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Das gibt es doch gar nicht !
Ich habe IDEal installiert, meinen Code geladen und es geschieht das selbe Problem wie in dem offiziellen Blitz Editor. Es kompiliert einfach nicht zu Ende !
Wenn ich den kleineren Code lade, der läuft auch hier wie in dem Original. Es macht keinen Unterschied welchen Editor ich benutze.

Das ist sehr irrietierend. Ich habe gehofft mit dem neuen Editor ginge alles.

Hmm... das könnte vielleicht bedeuten, daß der Blitz Compiler Exe das Problem in sich hat. Der neue Editor (IDEal) benutzt ja auch die selbe Blitz Exe.

Wenn das so ist. Was kann die Ursache sein ?
Hat einer von euch schon ein projekt gehabt , bei dem die Source Codes mit allen Includes zusammen über 2 MB groß waren ?
Jetzt bin ich ziemlich ratlos.


Ich habe gerade sogar ein Screenshot in die Galeria hochgeladen, um euch beim Helfen zu motivieren Smile
https://www.blitzforum.de/gallery/1554/
 

Krischan

BeitragDo, Nov 12, 2009 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Ehm folgendes: IDEal ist eine IDE, also Entwicklungsumgebung, benutzt aber nach wie vor den Blitz Compiler, also nur ein Frontend. Den Fehler suchen musst Du immer noch, es dürfte aber mit IDEeal leichter sein, diesen zu finden.
 

Omenaton_2

BeitragDo, Nov 12, 2009 15:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Krischan hat Folgendes geschrieben:
Ehm folgendes: IDEal ist eine IDE, also Entwicklungsumgebung, benutzt aber nach wie vor den Blitz Compiler, also nur ein Frontend. Den Fehler suchen musst Du immer noch, es dürfte aber mit IDEeal leichter sein, diesen zu finden.


Ja, das habe ich auch schon vorher verstanden. Es geht aber darum, daß ich meines Wissens nach keinen Fehler in meinem Code drin habe und ich vermutete, daß die Entwicklungsumgebung die Problemquelle sei. So ist es aber offensichtlich nicht.

Wenn du meine Fehlerbeschreibung liest, dann weißt du, daß der Fehler in einer Zeile auftritt wo ich einfach einer Variable einen Wert zuweise. Da kann kein Fehler drin sein.

NightPhoenix

BeitragDo, Nov 12, 2009 16:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Zeig uns bitte mal die entsprechenden Stellen deiner Punkte 2 udn 4 deiner Fehleranalyse.

Normalerweise bricht Blitz beim Compilieren nicht ab ohne sich zu melden. Zumindest ist mir das noch nie passiert. Ich denke mal eine komplette Deinstallation mit Registrierungsreinigung und Neuinstallation würde helfen.
 

Omenaton_2

Betreff: Update

BeitragDo, Nov 12, 2009 16:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe inzwischen ausprobiert, alle temporäre Variablen, in die ich die Werte aus den Type Feldern hineinkoüpiere ganz vorne im Code per Include als pure Variable Definition mit Wert Null anzugeben. Das hilft auch nichts.

Ich habe noch einen Test in der Zeile gemacht, wo der Fehler auftritt.
Wenn da steht :
If TempInt = 1 Then
TempInt = 2
EndIf

Dann ist kein Fehler. Das Programm läuft.

Wenn ich aber schreibe :
If TempNEW = 1 Then
TempNEW = 2
EndIf

Dann taucht der Fehler auf.

Der Unterschied ist, daß TempInt eine von mir oft in Code an verschiedenen Stellen benutze temporäre Integer Variable ist. Also nichts Neues.

TempNEW ist aber eine neue Variable, die ich sonst noch nicht in Code benutzt habe.

Dieser Test läßt die Schlußfolgerung zu, daß der Compiler Exe von BlitzBasic einfach keine weitere neue Variablen einführen lassen will.

Sollte das wirklich der Fall sein, dann habe ich ein gewaltiges Problem.
Ich habe noch die Idee zu versuchen stat normalen Variablen Types zu nehmen, vielleicht werden die anders bewertet. Wenn das aber auch nicht klappt dann ist das beängstigend.
Übrigens es ist eine menge Tipparbeit, weil wie gesagt geht es um ca 400 Variablen.

Noch ein Hinweis :
Selbst wenn ich die Rutine mit dem Lootcontainer erschaffen gar nicht anspringe, weil ich den Gosub auskommentiere, taucht der Fehler auf. Das ist auch ein Zeichen dafür, daß das kein echter logischer Programmfehler ist.
 

Omenaton_2

BeitragDo, Nov 12, 2009 17:00
Antworten mit Zitat
Benutzer-Profile anzeigen
NightPhoenix hat Folgendes geschrieben:
Zeig uns bitte mal die entsprechenden Stellen deiner Punkte 2 udn 4 deiner Fehleranalyse.

Normalerweise bricht Blitz beim Compilieren nicht ab ohne sich zu melden. Zumindest ist mir das noch nie passiert. Ich denke mal eine komplette Deinstallation mit Registrierungsreinigung und Neuinstallation würde helfen.


STOBP_SecW_Mesh_1_Name$ = StatObj\SecW_Mesh_1_Name$
; Bis hierher OK
STOBP_SecW_Mesh_2_Name$ = StatObj\SecW_Mesh_2_Name$
; Wenn diese 2. Zeile reinkommt, kommt der Fehler.

(Das ist bei Punkt 2. Punkt 4 kann da vernachlässigt werden. Aber da heißt es einfach nur umgekehrt : StatObj\SecW_Mesh_1_Name$ = STOBP_SecW_Mesh_1_Name$)

Ich habe auch schon probiert die Zeile zu vereinfachen, stat Type Name nur Null zu nehmen, das hilft auch nicht.

Mir ist so ein Fehler auch noch nie passiert und ich programmiere mit BlitzBasic auch schon immerhin ca 7 Jahre.

Deinstallation würde helfen ? Hmm, was könnte kaputtgegangen sein ? aber wenn mir sonst nichts hilft, werde ich das auch ausprobieren. Morgen, vorher aber noch denke ich nach was sonst noch sein könnte.

Holzchopf

Meisterpacker

BeitragDo, Nov 12, 2009 17:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Omenaton, Doppelposts sind nicht besonders beliebt hier Wink Wenn du zukünftig etwas nachtragen willst, kannst, editiere bitte einfach den letzten Beitrag (mit dem Editbutton: user posted image). Ausserdem ist das Zitieren von ganzen Beiträgen unnötig. Erst recht, wenn es sich um den vorangehenden Beitrag handelt.
So, genug davon =>

Ist es möglich, dass du die Variablen zählst, bis es zu diesem Problem kommt? Das wäre nett, denn dann hätten wir mal eine Art Spezifikation, die man später sicher wieder brauchen könnte. Benutzt du eigentlich ausschliesslich globale Variablen oder arbeitest du auch mit Locals? Ich fände es interessant, mal zu erfahren, wie viele Globals und Locals Blitz verkraftet.
Achja, du erwähnst Gosub: Versuch mal gewisse Strukturen statt in Subs einfach in Funktionen auszulagern, vielleicht bringt das schon was.
Und ich frag mich ehrlich gesagt grad ein wenig, wie man auf 2MiB Sourcecode kommt =/ Ich weiss ja nicht, wie du programmierst (mit sieben Jahren bestimmt nicht schlecht), aber bei so viel Code muss doch auch viel Optimierungspotenzial vorhanden sein... Wie du selbst schon sagtest, gewisse Dinge (oder Gruppen) könntest du ja in Types zusammenfassen.

mfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

Omenaton_2

Betreff: An Holzchopf

BeitragDo, Nov 12, 2009 18:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe mehrmals die Editierfunktion benutzt. Jedes Mal wenn es Sinn machte.
Es macht aber auch Sinn, einer Diskussion einen richtigen Fluß zu lassen in dem man in linearer Abfolge erkennen kann, wie sich was entwickelt hatte und was eine Antwort auf Was genau ist. Wenn man immer nur den selben Beitrag editiert und bis zum geht nicht mehr erweitert, ist das sicherlich nicht übersichtlicher oder (worum es mir geht) verständlicher.

So, genug davon...

Die Variablen zu zählen ist zu aufwendig, aber ich habe es zum Teil trotzdem getan.
Ich habe das Programm laufen lassen, dann das Debugfenster aufgemacht und dort die Globals und Constants zusammengezählt.
Komplett ohne die neue Rutine, in dem die ca 400 neue Variablen definiert werden sind es laut Anzeige 140 Globals und 37 Constants. was Locals angeht : "echte" Locals die ich als solche definiert habe, habe ich gar keine, aber der Debugger listet alle Type Fields als Locals auf. Davon gibt es sehr, sehr viele, die werde ich nicht zusammenzählen, weil das einfach zu viel ist.

Ergänzung : ich kann zwar nicht alles zusammenzählen, aber weil ich alle Type Definitionen zusammen in einem einzigen Include Datei drin habe, kann ich einfach schätzen wie Viele Type Felder ich insgesamt habe, in dem ich einfach die Zeilenanzahl des Cursors ganz unten anschaue. Demnach habe ich grob geschätzt 3500 Type Felder.

In der besagten Rutine wo die vielen neuen Variablen hinzukommen sollen, gehen 367 noch ohne Probleme, Wenn ich da noch die 368-ste dazuschreibe, dann kommst es zum Problem.

Also, zusammen wären es die Globals und Constants die gehen ca 545. dazu kämen noch die vielen, viele Type Fields.

"Achja, du erwähnst Gosub: Versuch mal gewisse Strukturen statt in Subs einfach in Funktionen auszulagern, vielleicht bringt das schon was"
- Das bringt absolut nichts. Gar nichts. (Außer, es sollte so sein, daß das Problem nur mit den Globals ist, was ich eher nicht glaube.)

"Und ich frag mich ehrlich gesagt grad ein wenig, wie man auf 2MiB Sourcecode kommt =/ "
- So, daß man ein großes Projekt mit vielen, vielen Features macht und nicht nur ein kleines Casual Game wie Tetris. Ich mache ein World of Warcraft ähnliches Spiel in Weltraum, nur offline. Wenn du solche Spiele kennst und ein bißchen Fantasie hast, dann solltest du dir das denken können, daß da Einiges an Sourcecode zusammenkommt und ich bin schätzungsweise schon etwas mehr als mir der Hälfte der Programmierarbeiten fertig.

"bei so viel Code muss doch auch viel Optimierungspotenzial vorhanden sein"
- Sicherlich ist da Optimierungspotential drin. Manches werde ich am Ende wahrscheinlich noch optimieren. Manches lasse ich obwohl es nicht optimal ist, (weil ich es Anfangs Mangels Kenntnisses der späteren Code Teilen nicht optimal machen konnte) unoptimiert, weil es zu aufwendig wäre diese Dinge nochmal anzugehen.

"Wie du selbst schon sagtest, gewisse Dinge (oder Gruppen) könntest du ja in Types zusammenfassen"
- Ja, ich könnte diese ca 400 Variablen auch als Type machen. Es würde aber gar keinen Sinn machen das zu tun und würde den Code nur länger machen, nicht kürzer. Das liegt daran, daß Types nur dann wirklich Sinn ergeben, wenn sie mehrere "Instanzen" haben müssen. Wenn ich aber immer nur eine "Instanz" brauche, dann wozu Type ?
Nichtsdestotrotz, werde ich wahrscheinlich versuchen die Sache mit Type zu machen, um zu sehen, ob das hilft oder nicht. Es ist eine Frage, ob die Begrenzung pro Variablen Typ (wie globals, Constants oder Locals) gilt oder alles zusammengenommen. Und gelten dabei die viele Type Fields als Locals, wie es den Anschein hat ?

Übrigens, die ca 400 neue Variablen definiere ich normaler weise nicht extra als "Global", deswegen müßten sie als Locals gelten (wenn ich mich richtig daran erinnere, was ich darüber kürzlich gelesen habe.)


Ergänzung :
Ich lese gerade in der offiziellen Hilfe Datei : " whenever you assign a variable that isn't Global, it is automatically assigned as a LOCAL variable. You can optionally assign a value to the variable at the time of declaration."
Also wären die ca 400 zusätzliche Variablen Locals, als ob sie Teil einer Function wären. Globals habe ich gar nciht so viele in meinem Code. Die überwältigende Mehrheit sind Type Fields. Das muß aber auch so bleiben.

Ich sehe auch wieder, daß in dem Debugfenster die Type Fields unter der Rubrik Locals aufgelistet werden. Wenn das so ist, dann würde es auch nichts bringen sie als Type anstat als Locals zu definieren.

Dann bleiben mir immer noch 2 häßliche Lösungen :
A., Ich verzichte darauf, den Lootcontainer vorauszuladen. Ich lasse es wie es bisher war, ich lade den Container schnell ein, wenn er erschaffen wird. Das fällt meist gar nicht auf, das geschieht so schnell.
B., Ganz, ganz häßlich wäre der Weg, daß ich gar keine neue Variablen definiere, sondern : ich springe zu dem Type Instanz des Musters. Ich kopiere den Wert dessen in meine beliebte "TempInt oder TempDeci, Temp$" Variablen. Dann springe ich zu der Type Instanz des neu erschaffenen Types (Neuer Container) und lese den Wert aus diesem Temp Variable ein.
Dann nochmal die selbe Prozädur für den nächsten Type Field. Es wird wieder nur die Temp Variable überschrieben, keine neue erschaffen. der alte Wert ist ja schon nicht mehr von Bedeutung. Dann so bei allen ca 400 Type Fields vorgehen. Ein hin und her. Das möchte ich vermeiden, weil es eine menge Tipp-Arbeit ist, den Code lang macht und weil ich vermute, daß das schlecht für den Performance sein würde- Aber, diese Lösung käme ohne einen einzige neue Variable egal welcher Art aus.

So würde diese häßliche Lösung "B" aussehen :

Code: [AUSKLAPPEN]
For StatObj.STATIC_OBJ = Each STATIC_OBJ : If StatObj\TypusNr = 10 And StatObj\Life_State = 4 Then Exit : Next
Temp$ = StatObj\Name$

For StatObj.STATIC_OBJ = Each STATIC_OBJ : If StatObj\ID = NewObjID Then Exit : Next
StatObj\Name$ = Temp$


Das würde 800 extra Code Zeilen, 800 extra Loop Durchgänge und 800 Extra If Then Bedingungen mit sich bringen. Würde aber wahrscheinlich zuverlässig funktionieren und verlangt nicht nach neuen Variablen.

Ansonsten denke ich, daß wenn ich davon ausgehe, daß wenn ich diese neue 400 Variablen wie auch immer für diesen Zweck nicht einführe, mir noch ca 367 freie Variablen zur Benutzung übrigbleiben.
Davon könnte ich schon bis zum Ende des Projektes auskommen, weil ich das meiste was ich brauche schon drin habe. Der einzige größere Bereich der noch fehlt sind die Quests, aber so viel wird das wohl auch nicht sein.

Ich habe gerade einen Vorab-Test zu dieser Möglichkeit B gemacht.
Einfach den Code von oben in einer Schleife 400 mal ausgeführt und die Zeit die dafür nötig war ausgegeben. Es waren nur 2 Millisekunden !
Selbst wenn das sich noch verdopplen oder gar verdreichfachen sollte, ist es immer noch sehr kurz.
Ich glaube ich werde doch diese "häßliche" Lösung nehmen. Das macht aber meinen Code schon wieder ein großes Stück länger. Man kann eben nicht immer alles gleichzetig haben : einen kurzen, kompakten Code, guten Performance, wenige Resourcen wie Variablen benutzen, einen übersichtlichen und leicht verständlichen Code (das ist bei einem sehr komplexen Projekt oft wichtiger als alles Andere !).
  • Zuletzt bearbeitet von Omenaton_2 am Do, Nov 12, 2009 20:50, insgesamt einmal bearbeitet
 

BIG BUG

BeitragDo, Nov 12, 2009 19:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn Du nur mit Gosub arbeitest dann sind alle Deine Variablen zwar an sich Local, allerdings nur im Kontext der Hauptroutine. Es wäre also durchaus denkbar, dass es hier beim Parser eine Beschränkung auf z.B. 500 Variablen in einem Kontext gibt.
Und um ehrlich zu sein sollte das eigentlich auch locker genügen.

Probiere mal aus, ob sich die Anzahl der möglichen Variablen ändert, wenn Du das betroffene Stück Code in eine eigene Funktion packst. Diese muss vermutlich auch nicht aufgerufen werden oder semantisch richtig sein.

Ich denke Du solltest Deinen Code generell dynamischer strukturieren und ggf. die Nutzung einer Scriptsprache wie BriskVM in Erwägung ziehen.
Und 400 Felder in einem Type halte ich für total übertrieben. Ich sehe ja ein, dass viele "Attribute" für ein Rollenspiel nötig sind, aber hier kann man gewiss vieles dynamisch abbilden.
Stichworte: BlitzArrays in Types, Types in Types und Bitoperationen für Ja/Nein-Werte

Ein WOW hat vermutlich keine Stelle im gesamten Code wo mehr als 100 hart codierte Variablen gleichzeitig benutzt würden...



EDIT
Und für Dein Problem:
Du hast einen Type der enthält alle statischen Definitionen(also was für alle Objekte dieses Typs gilt z.B. Meshreferenz, Hitpoints, etc) für alle möglichen Objekte.
Diese werden komplett beim Start des Levels oder des Spiels geladen. Alle Referenzentities werden mit Hideentity versteckt.

Dein Type der die Objekte enthält referenziert dann nur noch auf diesen Type z.B. Field def.tDef
Beim Erzeugen eines Objekts holst Du Dir dann mit CopyEntity einfach eine neue Instanz des Referenzmeshs. Kann sein dass Du noch ein ShowEntity auf Dein neu kopiertes Objekt machen musst.

Du musst einfach Dein Datenmodell ändern.
So bekommst Du einen kurzen, kompakten Code, gute Performance, benutzt wenige Resourcen wie Variablen, und hast einen übersichtlichen und mit entsprechender InlineDoku leicht verständlichen Code
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

Pummelie

BeitragDo, Nov 12, 2009 20:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst auch eine 2. exe machen.
Also ein bischen der functionen in ein zweites programm packen und diese dann per udp oder name pipe komunizieren lassen, ich denke jedoch das das sehr viel langsamer sein wird.
Oder nicht?
It's done when it's done.
 

E. Urbach

ehemals "Basicprogger"

BeitragDo, Nov 12, 2009 21:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Blitz3D Compiler hat doch keine Variablenbegrenzung. Wer kommt denn auf so eine sinnfreie Idee? Hier, ca. 1500 bzw. 2000 Variablen:

Code: [AUSKLAPPEN]
Local a0 = 0
Local a1 = 1
Local a2 = 2
Local a3 = 3
Local a4 = 4
Local a5 = 5
Local a6 = 6
Local a7 = 7
Local a8 = 8
Local a9 = 9
Local a10 = 10
Local a11 = 11
Local a12 = 12
Local a13 = 13
Local a14 = 14
Local a15 = 15
Local a16 = 16
Local a17 = 17
Local a18 = 18
Local a19 = 19
Local a20 = 20
Local a21 = 21
Local a22 = 22
Local a23 = 23
Local a24 = 24
Local a25 = 25
Local a26 = 26
Local a27 = 27
Local a28 = 28
Local a29 = 29
Local a30 = 30
Local a31 = 31
Local a32 = 32
Local a33 = 33
Local a34 = 34
Local a35 = 35
Local a36 = 36
Local a37 = 37
Local a38 = 38
Local a39 = 39
Local a40 = 40
Local a41 = 41
Local a42 = 42
Local a43 = 43
Local a44 = 44
Local a45 = 45
Local a46 = 46
Local a47 = 47
Local a48 = 48
Local a49 = 49
Local a50 = 50
Local a51 = 51
Local a52 = 52
Local a53 = 53
Local a54 = 54
Local a55 = 55
Local a56 = 56
Local a57 = 57
Local a58 = 58
Local a59 = 59
Local a60 = 60
Local a61 = 61
Local a62 = 62
Local a63 = 63
Local a64 = 64
Local a65 = 65
Local a66 = 66
Local a67 = 67
Local a68 = 68
Local a69 = 69
Local a70 = 70
Local a71 = 71
Local a72 = 72
Local a73 = 73
Local a74 = 74
Local a75 = 75
Local a76 = 76
Local a77 = 77
Local a78 = 78
Local a79 = 79
Local a80 = 80
Local a81 = 81
Local a82 = 82
Local a83 = 83
Local a84 = 84
Local a85 = 85
Local a86 = 86
Local a87 = 87
Local a88 = 88
Local a89 = 89
Local a90 = 90
Local a91 = 91
Local a92 = 92
Local a93 = 93
Local a94 = 94
Local a95 = 95
Local a96 = 96
Local a97 = 97
Local a98 = 98
Local a99 = 99
Local a100 = 100
Local a101 = 101
Local a102 = 102
Local a103 = 103
Local a104 = 104
Local a105 = 105
Local a106 = 106
Local a107 = 107
Local a108 = 108
Local a109 = 109
Local a110 = 110
Local a111 = 111
Local a112 = 112
Local a113 = 113
Local a114 = 114
Local a115 = 115
Local a116 = 116
Local a117 = 117
Local a118 = 118
Local a119 = 119
Local a120 = 120
Local a121 = 121
Local a122 = 122
Local a123 = 123
Local a124 = 124
Local a125 = 125
Local a126 = 126
Local a127 = 127
Local a128 = 128
Local a129 = 129
Local a130 = 130
Local a131 = 131
Local a132 = 132
Local a133 = 133
Local a134 = 134
Local a135 = 135
Local a136 = 136
Local a137 = 137
Local a138 = 138
Local a139 = 139
Local a140 = 140
Local a141 = 141
Local a142 = 142
Local a143 = 143
Local a144 = 144
Local a145 = 145
Local a146 = 146
Local a147 = 147
Local a148 = 148
Local a149 = 149
Local a150 = 150
Local a151 = 151
Local a152 = 152
Local a153 = 153
Local a154 = 154
Local a155 = 155
Local a156 = 156
Local a157 = 157
Local a158 = 158
Local a159 = 159
Local a160 = 160
Local a161 = 161
Local a162 = 162
Local a163 = 163
Local a164 = 164
Local a165 = 165
Local a166 = 166
Local a167 = 167
Local a168 = 168
Local a169 = 169
Local a170 = 170
Local a171 = 171
Local a172 = 172
Local a173 = 173
Local a174 = 174
Local a175 = 175
Local a176 = 176
Local a177 = 177
Local a178 = 178
Local a179 = 179
Local a180 = 180
Local a181 = 181
Local a182 = 182
Local a183 = 183
Local a184 = 184
Local a185 = 185
Local a186 = 186
Local a187 = 187
Local a188 = 188
Local a189 = 189
Local a190 = 190
Local a191 = 191
Local a192 = 192
Local a193 = 193
Local a194 = 194
Local a195 = 195
Local a196 = 196
Local a197 = 197
Local a198 = 198
Local a199 = 199
Local a200 = 200
Local a201 = 201
Local a202 = 202
Local a203 = 203
Local a204 = 204
Local a205 = 205
Local a206 = 206
Local a207 = 207
Local a208 = 208
Local a209 = 209
Local a210 = 210
Local a211 = 211
Local a212 = 212
Local a213 = 213
Local a214 = 214
Local a215 = 215
Local a216 = 216
Local a217 = 217
Local a218 = 218
Local a219 = 219
Local a220 = 220
Local a221 = 221
Local a222 = 222
Local a223 = 223
Local a224 = 224
Local a225 = 225
Local a226 = 226
Local a227 = 227
Local a228 = 228
Local a229 = 229
Local a230 = 230
Local a231 = 231
Local a232 = 232
Local a233 = 233
Local a234 = 234
Local a235 = 235
Local a236 = 236
Local a237 = 237
Local a238 = 238
Local a239 = 239
Local a240 = 240
Local a241 = 241
Local a242 = 242
Local a243 = 243
Local a244 = 244
Local a245 = 245
Local a246 = 246
Local a247 = 247
Local a248 = 248
Local a249 = 249
Local a250 = 250
Local a251 = 251
Local a252 = 252
Local a253 = 253
Local a254 = 254
Local a255 = 255
Local a256 = 256
Local a257 = 257
Local a258 = 258
Local a259 = 259
Local a260 = 260
Local a261 = 261
Local a262 = 262
Local a263 = 263
Local a264 = 264
Local a265 = 265
Local a266 = 266
Local a267 = 267
Local a268 = 268
Local a269 = 269
Local a270 = 270
Local a271 = 271
Local a272 = 272
Local a273 = 273
Local a274 = 274
Local a275 = 275
Local a276 = 276
Local a277 = 277
Local a278 = 278
Local a279 = 279
Local a280 = 280
Local a281 = 281
Local a282 = 282
Local a283 = 283
Local a284 = 284
Local a285 = 285
Local a286 = 286
Local a287 = 287
Local a288 = 288
Local a289 = 289
Local a290 = 290
Local a291 = 291
Local a292 = 292
Local a293 = 293
Local a294 = 294
Local a295 = 295
Local a296 = 296
Local a297 = 297
Local a298 = 298
Local a299 = 299
Local a300 = 300
Local a301 = 301
Local a302 = 302
Local a303 = 303
Local a304 = 304
Local a305 = 305
Local a306 = 306
Local a307 = 307
Local a308 = 308
Local a309 = 309
Local a310 = 310
Local a311 = 311
Local a312 = 312
Local a313 = 313
Local a314 = 314
Local a315 = 315
Local a316 = 316
Local a317 = 317
Local a318 = 318
Local a319 = 319
Local a320 = 320
Local a321 = 321
Local a322 = 322
Local a323 = 323
Local a324 = 324
Local a325 = 325
Local a326 = 326
Local a327 = 327
Local a328 = 328
Local a329 = 329
Local a330 = 330
Local a331 = 331
Local a332 = 332
Local a333 = 333
Local a334 = 334
Local a335 = 335
Local a336 = 336
Local a337 = 337
Local a338 = 338
Local a339 = 339
Local a340 = 340
Local a341 = 341
Local a342 = 342
Local a343 = 343
Local a344 = 344
Local a345 = 345
Local a346 = 346
Local a347 = 347
Local a348 = 348
Local a349 = 349
Local a350 = 350
Local a351 = 351
Local a352 = 352
Local a353 = 353
Local a354 = 354
Local a355 = 355
Local a356 = 356
Local a357 = 357
Local a358 = 358
Local a359 = 359
Local a360 = 360
Local a361 = 361
Local a362 = 362
Local a363 = 363
Local a364 = 364
Local a365 = 365
Local a366 = 366
Local a367 = 367
Local a368 = 368
Local a369 = 369
Local a370 = 370
Local a371 = 371
Local a372 = 372
Local a373 = 373
Local a374 = 374
Local a375 = 375
Local a376 = 376
Local a377 = 377
Local a378 = 378
Local a379 = 379
Local a380 = 380
Local a381 = 381
Local a382 = 382
Local a383 = 383
Local a384 = 384
Local a385 = 385
Local a386 = 386
Local a387 = 387
Local a388 = 388
Local a389 = 389
Local a390 = 390
Local a391 = 391
Local a392 = 392
Local a393 = 393
Local a394 = 394
Local a395 = 395
Local a396 = 396
Local a397 = 397
Local a398 = 398
Local a399 = 399
Local a400 = 400
Local a401 = 401
Local a402 = 402
Local a403 = 403
Local a404 = 404
Local a405 = 405
Local a406 = 406
Local a407 = 407
Local a408 = 408
Local a409 = 409
Local a410 = 410
Local a411 = 411
Local a412 = 412
Local a413 = 413
Local a414 = 414
Local a415 = 415
Local a416 = 416
Local a417 = 417
Local a418 = 418
Local a419 = 419
Local a420 = 420
Local a421 = 421
Local a422 = 422
Local a423 = 423
Local a424 = 424
Local a425 = 425
Local a426 = 426
Local a427 = 427
Local a428 = 428
Local a429 = 429
Local a430 = 430
Local a431 = 431
Local a432 = 432
Local a433 = 433
Local a434 = 434
Local a435 = 435
Local a436 = 436
Local a437 = 437
Local a438 = 438
Local a439 = 439
Local a440 = 440
Local a441 = 441
Local a442 = 442
Local a443 = 443
Local a444 = 444
Local a445 = 445
Local a446 = 446
Local a447 = 447
Local a448 = 448
Local a449 = 449
Local a450 = 450
Local a451 = 451
Local a452 = 452
Local a453 = 453
Local a454 = 454
Local a455 = 455
Local a456 = 456
Local a457 = 457
Local a458 = 458
Local a459 = 459
Local a460 = 460
Local a461 = 461
Local a462 = 462
Local a463 = 463
Local a464 = 464
Local a465 = 465
Local a466 = 466
Local a467 = 467
Local a468 = 468
Local a469 = 469
Local a470 = 470
Local a471 = 471
Local a472 = 472
Local a473 = 473
Local a474 = 474
Local a475 = 475
Local a476 = 476
Local a477 = 477
Local a478 = 478
Local a479 = 479
Local a480 = 480
Local a481 = 481
Local a482 = 482
Local a483 = 483
Local a484 = 484
Local a485 = 485
Local a486 = 486
Local a487 = 487
Local a488 = 488
Local a489 = 489
Local a490 = 490
Local a491 = 491
Local a492 = 492
Local a493 = 493
Local a494 = 494
Local a495 = 495
Local a496 = 496
Local a497 = 497
Local a498 = 498
Local a499 = 499
Local a500 = 500
Global b0 = 0
Global b1 = 1
Global b2 = 2
Global b3 = 3
Global b4 = 4
Global b5 = 5
Global b6 = 6
Global b7 = 7
Global b8 = 8
Global b9 = 9
Global b10 = 10
Global b11 = 11
Global b12 = 12
Global b13 = 13
Global b14 = 14
Global b15 = 15
Global b16 = 16
Global b17 = 17
Global b18 = 18
Global b19 = 19
Global b20 = 20
Global b21 = 21
Global b22 = 22
Global b23 = 23
Global b24 = 24
Global b25 = 25
Global b26 = 26
Global b27 = 27
Global b28 = 28
Global b29 = 29
Global b30 = 30
Global b31 = 31
Global b32 = 32
Global b33 = 33
Global b34 = 34
Global b35 = 35
Global b36 = 36
Global b37 = 37
Global b38 = 38
Global b39 = 39
Global b40 = 40
Global b41 = 41
Global b42 = 42
Global b43 = 43
Global b44 = 44
Global b45 = 45
Global b46 = 46
Global b47 = 47
Global b48 = 48
Global b49 = 49
Global b50 = 50
Global b51 = 51
Global b52 = 52
Global b53 = 53
Global b54 = 54
Global b55 = 55
Global b56 = 56
Global b57 = 57
Global b58 = 58
Global b59 = 59
Global b60 = 60
Global b61 = 61
Global b62 = 62
Global b63 = 63
Global b64 = 64
Global b65 = 65
Global b66 = 66
Global b67 = 67
Global b68 = 68
Global b69 = 69
Global b70 = 70
Global b71 = 71
Global b72 = 72
Global b73 = 73
Global b74 = 74
Global b75 = 75
Global b76 = 76
Global b77 = 77
Global b78 = 78
Global b79 = 79
Global b80 = 80
Global b81 = 81
Global b82 = 82
Global b83 = 83
Global b84 = 84
Global b85 = 85
Global b86 = 86
Global b87 = 87
Global b88 = 88
Global b89 = 89
Global b90 = 90
Global b91 = 91
Global b92 = 92
Global b93 = 93
Global b94 = 94
Global b95 = 95
Global b96 = 96
Global b97 = 97
Global b98 = 98
Global b99 = 99
Global b100 = 100
Global b101 = 101
Global b102 = 102
Global b103 = 103
Global b104 = 104
Global b105 = 105
Global b106 = 106
Global b107 = 107
Global b108 = 108
Global b109 = 109
Global b110 = 110
Global b111 = 111
Global b112 = 112
Global b113 = 113
Global b114 = 114
Global b115 = 115
Global b116 = 116
Global b117 = 117
Global b118 = 118
Global b119 = 119
Global b120 = 120
Global b121 = 121
Global b122 = 122
Global b123 = 123
Global b124 = 124
Global b125 = 125
Global b126 = 126
Global b127 = 127
Global b128 = 128
Global b129 = 129
Global b130 = 130
Global b131 = 131
Global b132 = 132
Global b133 = 133
Global b134 = 134
Global b135 = 135
Global b136 = 136
Global b137 = 137
Global b138 = 138
Global b139 = 139
Global b140 = 140
Global b141 = 141
Global b142 = 142
Global b143 = 143
Global b144 = 144
Global b145 = 145
Global b146 = 146
Global b147 = 147
Global b148 = 148
Global b149 = 149
Global b150 = 150
Global b151 = 151
Global b152 = 152
Global b153 = 153
Global b154 = 154
Global b155 = 155
Global b156 = 156
Global b157 = 157
Global b158 = 158
Global b159 = 159
Global b160 = 160
Global b161 = 161
Global b162 = 162
Global b163 = 163
Global b164 = 164
Global b165 = 165
Global b166 = 166
Global b167 = 167
Global b168 = 168
Global b169 = 169
Global b170 = 170
Global b171 = 171
Global b172 = 172
Global b173 = 173
Global b174 = 174
Global b175 = 175
Global b176 = 176
Global b177 = 177
Global b178 = 178
Global b179 = 179
Global b180 = 180
Global b181 = 181
Global b182 = 182
Global b183 = 183
Global b184 = 184
Global b185 = 185
Global b186 = 186
Global b187 = 187
Global b188 = 188
Global b189 = 189
Global b190 = 190
Global b191 = 191
Global b192 = 192
Global b193 = 193
Global b194 = 194
Global b195 = 195
Global b196 = 196
Global b197 = 197
Global b198 = 198
Global b199 = 199
Global b200 = 200
Global b201 = 201
Global b202 = 202
Global b203 = 203
Global b204 = 204
Global b205 = 205
Global b206 = 206
Global b207 = 207
Global b208 = 208
Global b209 = 209
Global b210 = 210
Global b211 = 211
Global b212 = 212
Global b213 = 213
Global b214 = 214
Global b215 = 215
Global b216 = 216
Global b217 = 217
Global b218 = 218
Global b219 = 219
Global b220 = 220
Global b221 = 221
Global b222 = 222
Global b223 = 223
Global b224 = 224
Global b225 = 225
Global b226 = 226
Global b227 = 227
Global b228 = 228
Global b229 = 229
Global b230 = 230
Global b231 = 231
Global b232 = 232
Global b233 = 233
Global b234 = 234
Global b235 = 235
Global b236 = 236
Global b237 = 237
Global b238 = 238
Global b239 = 239
Global b240 = 240
Global b241 = 241
Global b242 = 242
Global b243 = 243
Global b244 = 244
Global b245 = 245
Global b246 = 246
Global b247 = 247
Global b248 = 248
Global b249 = 249
Global b250 = 250
Global b251 = 251
Global b252 = 252
Global b253 = 253
Global b254 = 254
Global b255 = 255
Global b256 = 256
Global b257 = 257
Global b258 = 258
Global b259 = 259
Global b260 = 260
Global b261 = 261
Global b262 = 262
Global b263 = 263
Global b264 = 264
Global b265 = 265
Global b266 = 266
Global b267 = 267
Global b268 = 268
Global b269 = 269
Global b270 = 270
Global b271 = 271
Global b272 = 272
Global b273 = 273
Global b274 = 274
Global b275 = 275
Global b276 = 276
Global b277 = 277
Global b278 = 278
Global b279 = 279
Global b280 = 280
Global b281 = 281
Global b282 = 282
Global b283 = 283
Global b284 = 284
Global b285 = 285
Global b286 = 286
Global b287 = 287
Global b288 = 288
Global b289 = 289
Global b290 = 290
Global b291 = 291
Global b292 = 292
Global b293 = 293
Global b294 = 294
Global b295 = 295
Global b296 = 296
Global b297 = 297
Global b298 = 298
Global b299 = 299
Global b300 = 300
Global b301 = 301
Global b302 = 302
Global b303 = 303
Global b304 = 304
Global b305 = 305
Global b306 = 306
Global b307 = 307
Global b308 = 308
Global b309 = 309
Global b310 = 310
Global b311 = 311
Global b312 = 312
Global b313 = 313
Global b314 = 314
Global b315 = 315
Global b316 = 316
Global b317 = 317
Global b318 = 318
Global b319 = 319
Global b320 = 320
Global b321 = 321
Global b322 = 322
Global b323 = 323
Global b324 = 324
Global b325 = 325
Global b326 = 326
Global b327 = 327
Global b328 = 328
Global b329 = 329
Global b330 = 330
Global b331 = 331
Global b332 = 332
Global b333 = 333
Global b334 = 334
Global b335 = 335
Global b336 = 336
Global b337 = 337
Global b338 = 338
Global b339 = 339
Global b340 = 340
Global b341 = 341
Global b342 = 342
Global b343 = 343
Global b344 = 344
Global b345 = 345
Global b346 = 346
Global b347 = 347
Global b348 = 348
Global b349 = 349
Global b350 = 350
Global b351 = 351
Global b352 = 352
Global b353 = 353
Global b354 = 354
Global b355 = 355
Global b356 = 356
Global b357 = 357
Global b358 = 358
Global b359 = 359
Global b360 = 360
Global b361 = 361
Global b362 = 362
Global b363 = 363
Global b364 = 364
Global b365 = 365
Global b366 = 366
Global b367 = 367
Global b368 = 368
Global b369 = 369
Global b370 = 370
Global b371 = 371
Global b372 = 372
Global b373 = 373
Global b374 = 374
Global b375 = 375
Global b376 = 376
Global b377 = 377
Global b378 = 378
Global b379 = 379
Global b380 = 380
Global b381 = 381
Global b382 = 382
Global b383 = 383
Global b384 = 384
Global b385 = 385
Global b386 = 386
Global b387 = 387
Global b388 = 388
Global b389 = 389
Global b390 = 390
Global b391 = 391
Global b392 = 392
Global b393 = 393
Global b394 = 394
Global b395 = 395
Global b396 = 396
Global b397 = 397
Global b398 = 398
Global b399 = 399
Global b400 = 400
Global b401 = 401
Global b402 = 402
Global b403 = 403
Global b404 = 404
Global b405 = 405
Global b406 = 406
Global b407 = 407
Global b408 = 408
Global b409 = 409
Global b410 = 410
Global b411 = 411
Global b412 = 412
Global b413 = 413
Global b414 = 414
Global b415 = 415
Global b416 = 416
Global b417 = 417
Global b418 = 418
Global b419 = 419
Global b420 = 420
Global b421 = 421
Global b422 = 422
Global b423 = 423
Global b424 = 424
Global b425 = 425
Global b426 = 426
Global b427 = 427
Global b428 = 428
Global b429 = 429
Global b430 = 430
Global b431 = 431
Global b432 = 432
Global b433 = 433
Global b434 = 434
Global b435 = 435
Global b436 = 436
Global b437 = 437
Global b438 = 438
Global b439 = 439
Global b440 = 440
Global b441 = 441
Global b442 = 442
Global b443 = 443
Global b444 = 444
Global b445 = 445
Global b446 = 446
Global b447 = 447
Global b448 = 448
Global b449 = 449
Global b450 = 450
Global b451 = 451
Global b452 = 452
Global b453 = 453
Global b454 = 454
Global b455 = 455
Global b456 = 456
Global b457 = 457
Global b458 = 458
Global b459 = 459
Global b460 = 460
Global b461 = 461
Global b462 = 462
Global b463 = 463
Global b464 = 464
Global b465 = 465
Global b466 = 466
Global b467 = 467
Global b468 = 468
Global b469 = 469
Global b470 = 470
Global b471 = 471
Global b472 = 472
Global b473 = 473
Global b474 = 474
Global b475 = 475
Global b476 = 476
Global b477 = 477
Global b478 = 478
Global b479 = 479
Global b480 = 480
Global b481 = 481
Global b482 = 482
Global b483 = 483
Global b484 = 484
Global b485 = 485
Global b486 = 486
Global b487 = 487
Global b488 = 488
Global b489 = 489
Global b490 = 490
Global b491 = 491
Global b492 = 492
Global b493 = 493
Global b494 = 494
Global b495 = 495
Global b496 = 496
Global b497 = 497
Global b498 = 498
Global b499 = 499
Global b500 = 500
Function func_context()
   Local c0 = 0
   Local c1 = 1
   Local c2 = 2
   Local c3 = 3
   Local c4 = 4
   Local c5 = 5
   Local c6 = 6
   Local c7 = 7
   Local c8 = 8
   Local c9 = 9
   Local c10 = 10
   Local c11 = 11
   Local c12 = 12
   Local c13 = 13
   Local c14 = 14
   Local c15 = 15
   Local c16 = 16
   Local c17 = 17
   Local c18 = 18
   Local c19 = 19
   Local c20 = 20
   Local c21 = 21
   Local c22 = 22
   Local c23 = 23
   Local c24 = 24
   Local c25 = 25
   Local c26 = 26
   Local c27 = 27
   Local c28 = 28
   Local c29 = 29
   Local c30 = 30
   Local c31 = 31
   Local c32 = 32
   Local c33 = 33
   Local c34 = 34
   Local c35 = 35
   Local c36 = 36
   Local c37 = 37
   Local c38 = 38
   Local c39 = 39
   Local c40 = 40
   Local c41 = 41
   Local c42 = 42
   Local c43 = 43
   Local c44 = 44
   Local c45 = 45
   Local c46 = 46
   Local c47 = 47
   Local c48 = 48
   Local c49 = 49
   Local c50 = 50
   Local c51 = 51
   Local c52 = 52
   Local c53 = 53
   Local c54 = 54
   Local c55 = 55
   Local c56 = 56
   Local c57 = 57
   Local c58 = 58
   Local c59 = 59
   Local c60 = 60
   Local c61 = 61
   Local c62 = 62
   Local c63 = 63
   Local c64 = 64
   Local c65 = 65
   Local c66 = 66
   Local c67 = 67
   Local c68 = 68
   Local c69 = 69
   Local c70 = 70
   Local c71 = 71
   Local c72 = 72
   Local c73 = 73
   Local c74 = 74
   Local c75 = 75
   Local c76 = 76
   Local c77 = 77
   Local c78 = 78
   Local c79 = 79
   Local c80 = 80
   Local c81 = 81
   Local c82 = 82
   Local c83 = 83
   Local c84 = 84
   Local c85 = 85
   Local c86 = 86
   Local c87 = 87
   Local c88 = 88
   Local c89 = 89
   Local c90 = 90
   Local c91 = 91
   Local c92 = 92
   Local c93 = 93
   Local c94 = 94
   Local c95 = 95
   Local c96 = 96
   Local c97 = 97
   Local c98 = 98
   Local c99 = 99
   Local c100 = 100
   Local c101 = 101
   Local c102 = 102
   Local c103 = 103
   Local c104 = 104
   Local c105 = 105
   Local c106 = 106
   Local c107 = 107
   Local c108 = 108
   Local c109 = 109
   Local c110 = 110
   Local c111 = 111
   Local c112 = 112
   Local c113 = 113
   Local c114 = 114
   Local c115 = 115
   Local c116 = 116
   Local c117 = 117
   Local c118 = 118
   Local c119 = 119
   Local c120 = 120
   Local c121 = 121
   Local c122 = 122
   Local c123 = 123
   Local c124 = 124
   Local c125 = 125
   Local c126 = 126
   Local c127 = 127
   Local c128 = 128
   Local c129 = 129
   Local c130 = 130
   Local c131 = 131
   Local c132 = 132
   Local c133 = 133
   Local c134 = 134
   Local c135 = 135
   Local c136 = 136
   Local c137 = 137
   Local c138 = 138
   Local c139 = 139
   Local c140 = 140
   Local c141 = 141
   Local c142 = 142
   Local c143 = 143
   Local c144 = 144
   Local c145 = 145
   Local c146 = 146
   Local c147 = 147
   Local c148 = 148
   Local c149 = 149
   Local c150 = 150
   Local c151 = 151
   Local c152 = 152
   Local c153 = 153
   Local c154 = 154
   Local c155 = 155
   Local c156 = 156
   Local c157 = 157
   Local c158 = 158
   Local c159 = 159
   Local c160 = 160
   Local c161 = 161
   Local c162 = 162
   Local c163 = 163
   Local c164 = 164
   Local c165 = 165
   Local c166 = 166
   Local c167 = 167
   Local c168 = 168
   Local c169 = 169
   Local c170 = 170
   Local c171 = 171
   Local c172 = 172
   Local c173 = 173
   Local c174 = 174
   Local c175 = 175
   Local c176 = 176
   Local c177 = 177
   Local c178 = 178
   Local c179 = 179
   Local c180 = 180
   Local c181 = 181
   Local c182 = 182
   Local c183 = 183
   Local c184 = 184
   Local c185 = 185
   Local c186 = 186
   Local c187 = 187
   Local c188 = 188
   Local c189 = 189
   Local c190 = 190
   Local c191 = 191
   Local c192 = 192
   Local c193 = 193
   Local c194 = 194
   Local c195 = 195
   Local c196 = 196
   Local c197 = 197
   Local c198 = 198
   Local c199 = 199
   Local c200 = 200
   Local c201 = 201
   Local c202 = 202
   Local c203 = 203
   Local c204 = 204
   Local c205 = 205
   Local c206 = 206
   Local c207 = 207
   Local c208 = 208
   Local c209 = 209
   Local c210 = 210
   Local c211 = 211
   Local c212 = 212
   Local c213 = 213
   Local c214 = 214
   Local c215 = 215
   Local c216 = 216
   Local c217 = 217
   Local c218 = 218
   Local c219 = 219
   Local c220 = 220
   Local c221 = 221
   Local c222 = 222
   Local c223 = 223
   Local c224 = 224
   Local c225 = 225
   Local c226 = 226
   Local c227 = 227
   Local c228 = 228
   Local c229 = 229
   Local c230 = 230
   Local c231 = 231
   Local c232 = 232
   Local c233 = 233
   Local c234 = 234
   Local c235 = 235
   Local c236 = 236
   Local c237 = 237
   Local c238 = 238
   Local c239 = 239
   Local c240 = 240
   Local c241 = 241
   Local c242 = 242
   Local c243 = 243
   Local c244 = 244
   Local c245 = 245
   Local c246 = 246
   Local c247 = 247
   Local c248 = 248
   Local c249 = 249
   Local c250 = 250
   Local c251 = 251
   Local c252 = 252
   Local c253 = 253
   Local c254 = 254
   Local c255 = 255
   Local c256 = 256
   Local c257 = 257
   Local c258 = 258
   Local c259 = 259
   Local c260 = 260
   Local c261 = 261
   Local c262 = 262
   Local c263 = 263
   Local c264 = 264
   Local c265 = 265
   Local c266 = 266
   Local c267 = 267
   Local c268 = 268
   Local c269 = 269
   Local c270 = 270
   Local c271 = 271
   Local c272 = 272
   Local c273 = 273
   Local c274 = 274
   Local c275 = 275
   Local c276 = 276
   Local c277 = 277
   Local c278 = 278
   Local c279 = 279
   Local c280 = 280
   Local c281 = 281
   Local c282 = 282
   Local c283 = 283
   Local c284 = 284
   Local c285 = 285
   Local c286 = 286
   Local c287 = 287
   Local c288 = 288
   Local c289 = 289
   Local c290 = 290
   Local c291 = 291
   Local c292 = 292
   Local c293 = 293
   Local c294 = 294
   Local c295 = 295
   Local c296 = 296
   Local c297 = 297
   Local c298 = 298
   Local c299 = 299
   Local c300 = 300
   Local c301 = 301
   Local c302 = 302
   Local c303 = 303
   Local c304 = 304
   Local c305 = 305
   Local c306 = 306
   Local c307 = 307
   Local c308 = 308
   Local c309 = 309
   Local c310 = 310
   Local c311 = 311
   Local c312 = 312
   Local c313 = 313
   Local c314 = 314
   Local c315 = 315
   Local c316 = 316
   Local c317 = 317
   Local c318 = 318
   Local c319 = 319
   Local c320 = 320
   Local c321 = 321
   Local c322 = 322
   Local c323 = 323
   Local c324 = 324
   Local c325 = 325
   Local c326 = 326
   Local c327 = 327
   Local c328 = 328
   Local c329 = 329
   Local c330 = 330
   Local c331 = 331
   Local c332 = 332
   Local c333 = 333
   Local c334 = 334
   Local c335 = 335
   Local c336 = 336
   Local c337 = 337
   Local c338 = 338
   Local c339 = 339
   Local c340 = 340
   Local c341 = 341
   Local c342 = 342
   Local c343 = 343
   Local c344 = 344
   Local c345 = 345
   Local c346 = 346
   Local c347 = 347
   Local c348 = 348
   Local c349 = 349
   Local c350 = 350
   Local c351 = 351
   Local c352 = 352
   Local c353 = 353
   Local c354 = 354
   Local c355 = 355
   Local c356 = 356
   Local c357 = 357
   Local c358 = 358
   Local c359 = 359
   Local c360 = 360
   Local c361 = 361
   Local c362 = 362
   Local c363 = 363
   Local c364 = 364
   Local c365 = 365
   Local c366 = 366
   Local c367 = 367
   Local c368 = 368
   Local c369 = 369
   Local c370 = 370
   Local c371 = 371
   Local c372 = 372
   Local c373 = 373
   Local c374 = 374
   Local c375 = 375
   Local c376 = 376
   Local c377 = 377
   Local c378 = 378
   Local c379 = 379
   Local c380 = 380
   Local c381 = 381
   Local c382 = 382
   Local c383 = 383
   Local c384 = 384
   Local c385 = 385
   Local c386 = 386
   Local c387 = 387
   Local c388 = 388
   Local c389 = 389
   Local c390 = 390
   Local c391 = 391
   Local c392 = 392
   Local c393 = 393
   Local c394 = 394
   Local c395 = 395
   Local c396 = 396
   Local c397 = 397
   Local c398 = 398
   Local c399 = 399
   Local c400 = 400
   Local c401 = 401
   Local c402 = 402
   Local c403 = 403
   Local c404 = 404
   Local c405 = 405
   Local c406 = 406
   Local c407 = 407
   Local c408 = 408
   Local c409 = 409
   Local c410 = 410
   Local c411 = 411
   Local c412 = 412
   Local c413 = 413
   Local c414 = 414
   Local c415 = 415
   Local c416 = 416
   Local c417 = 417
   Local c418 = 418
   Local c419 = 419
   Local c420 = 420
   Local c421 = 421
   Local c422 = 422
   Local c423 = 423
   Local c424 = 424
   Local c425 = 425
   Local c426 = 426
   Local c427 = 427
   Local c428 = 428
   Local c429 = 429
   Local c430 = 430
   Local c431 = 431
   Local c432 = 432
   Local c433 = 433
   Local c434 = 434
   Local c435 = 435
   Local c436 = 436
   Local c437 = 437
   Local c438 = 438
   Local c439 = 439
   Local c440 = 440
   Local c441 = 441
   Local c442 = 442
   Local c443 = 443
   Local c444 = 444
   Local c445 = 445
   Local c446 = 446
   Local c447 = 447
   Local c448 = 448
   Local c449 = 449
   Local c450 = 450
   Local c451 = 451
   Local c452 = 452
   Local c453 = 453
   Local c454 = 454
   Local c455 = 455
   Local c456 = 456
   Local c457 = 457
   Local c458 = 458
   Local c459 = 459
   Local c460 = 460
   Local c461 = 461
   Local c462 = 462
   Local c463 = 463
   Local c464 = 464
   Local c465 = 465
   Local c466 = 466
   Local c467 = 467
   Local c468 = 468
   Local c469 = 469
   Local c470 = 470
   Local c471 = 471
   Local c472 = 472
   Local c473 = 473
   Local c474 = 474
   Local c475 = 475
   Local c476 = 476
   Local c477 = 477
   Local c478 = 478
   Local c479 = 479
   Local c480 = 480
   Local c481 = 481
   Local c482 = 482
   Local c483 = 483
   Local c484 = 484
   Local c485 = 485
   Local c486 = 486
   Local c487 = 487
   Local c488 = 488
   Local c489 = 489
   Local c490 = 490
   Local c491 = 491
   Local c492 = 492
   Local c493 = 493
   Local c494 = 494
   Local c495 = 495
   Local c496 = 496
   Local c497 = 497
   Local c498 = 498
   Local c499 = 499
   Local c500 = 500
   Print a0
   Print b0
   Print c0
   Print a1
   Print b1
   Print c1
   Print a2
   Print b2
   Print c2
   Print a3
   Print b3
   Print c3
   Print a4
   Print b4
   Print c4
   Print a5
   Print b5
   Print c5
   Print a6
   Print b6
   Print c6
   Print a7
   Print b7
   Print c7
   Print a8
   Print b8
   Print c8
   Print a9
   Print b9
   Print c9
   Print a10
   Print b10
   Print c10
   Print a11
   Print b11
   Print c11
   Print a12
   Print b12
   Print c12
   Print a13
   Print b13
   Print c13
   Print a14
   Print b14
   Print c14
   Print a15
   Print b15
   Print c15
   Print a16
   Print b16
   Print c16
   Print a17
   Print b17
   Print c17
   Print a18
   Print b18
   Print c18
   Print a19
   Print b19
   Print c19
   Print a20
   Print b20
   Print c20
   Print a21
   Print b21
   Print c21
   Print a22
   Print b22
   Print c22
   Print a23
   Print b23
   Print c23
   Print a24
   Print b24
   Print c24
   Print a25
   Print b25
   Print c25
   Print a26
   Print b26
   Print c26
   Print a27
   Print b27
   Print c27
   Print a28
   Print b28
   Print c28
   Print a29
   Print b29
   Print c29
   Print a30
   Print b30
   Print c30
   Print a31
   Print b31
   Print c31
   Print a32
   Print b32
   Print c32
   Print a33
   Print b33
   Print c33
   Print a34
   Print b34
   Print c34
   Print a35
   Print b35
   Print c35
   Print a36
   Print b36
   Print c36
   Print a37
   Print b37
   Print c37
   Print a38
   Print b38
   Print c38
   Print a39
   Print b39
   Print c39
   Print a40
   Print b40
   Print c40
   Print a41
   Print b41
   Print c41
   Print a42
   Print b42
   Print c42
   Print a43
   Print b43
   Print c43
   Print a44
   Print b44
   Print c44
   Print a45
   Print b45
   Print c45
   Print a46
   Print b46
   Print c46
   Print a47
   Print b47
   Print c47
   Print a48
   Print b48
   Print c48
   Print a49
   Print b49
   Print c49
   Print a50
   Print b50
   Print c50
   Print a51
   Print b51
   Print c51
   Print a52
   Print b52
   Print c52
   Print a53
   Print b53
   Print c53
   Print a54
   Print b54
   Print c54
   Print a55
   Print b55
   Print c55
   Print a56
   Print b56
   Print c56
   Print a57
   Print b57
   Print c57
   Print a58
   Print b58
   Print c58
   Print a59
   Print b59
   Print c59
   Print a60
   Print b60
   Print c60
   Print a61
   Print b61
   Print c61
   Print a62
   Print b62
   Print c62
   Print a63
   Print b63
   Print c63
   Print a64
   Print b64
   Print c64
   Print a65
   Print b65
   Print c65
   Print a66
   Print b66
   Print c66
   Print a67
   Print b67
   Print c67
   Print a68
   Print b68
   Print c68
   Print a69
   Print b69
   Print c69
   Print a70
   Print b70
   Print c70
   Print a71
   Print b71
   Print c71
   Print a72
   Print b72
   Print c72
   Print a73
   Print b73
   Print c73
   Print a74
   Print b74
   Print c74
   Print a75
   Print b75
   Print c75
   Print a76
   Print b76
   Print c76
   Print a77
   Print b77
   Print c77
   Print a78
   Print b78
   Print c78
   Print a79
   Print b79
   Print c79
   Print a80
   Print b80
   Print c80
   Print a81
   Print b81
   Print c81
   Print a82
   Print b82
   Print c82
   Print a83
   Print b83
   Print c83
   Print a84
   Print b84
   Print c84
   Print a85
   Print b85
   Print c85
   Print a86
   Print b86
   Print c86
   Print a87
   Print b87
   Print c87
   Print a88
   Print b88
   Print c88
   Print a89
   Print b89
   Print c89
   Print a90
   Print b90
   Print c90
   Print a91
   Print b91
   Print c91
   Print a92
   Print b92
   Print c92
   Print a93
   Print b93
   Print c93
   Print a94
   Print b94
   Print c94
   Print a95
   Print b95
   Print c95
   Print a96
   Print b96
   Print c96
   Print a97
   Print b97
   Print c97
   Print a98
   Print b98
   Print c98
   Print a99
   Print b99
   Print c99
   Print a100
   Print b100
   Print c100
   Print a101
   Print b101
   Print c101
   Print a102
   Print b102
   Print c102
   Print a103
   Print b103
   Print c103
   Print a104
   Print b104
   Print c104
   Print a105
   Print b105
   Print c105
   Print a106
   Print b106
   Print c106
   Print a107
   Print b107
   Print c107
   Print a108
   Print b108
   Print c108
   Print a109
   Print b109
   Print c109
   Print a110
   Print b110
   Print c110
   Print a111
   Print b111
   Print c111
   Print a112
   Print b112
   Print c112
   Print a113
   Print b113
   Print c113
   Print a114
   Print b114
   Print c114
   Print a115
   Print b115
   Print c115
   Print a116
   Print b116
   Print c116
   Print a117
   Print b117
   Print c117
   Print a118
   Print b118
   Print c118
   Print a119
   Print b119
   Print c119
   Print a120
   Print b120
   Print c120
   Print a121
   Print b121
   Print c121
   Print a122
   Print b122
   Print c122
   Print a123
   Print b123
   Print c123
   Print a124
   Print b124
   Print c124
   Print a125
   Print b125
   Print c125
   Print a126
   Print b126
   Print c126
   Print a127
   Print b127
   Print c127
   Print a128
   Print b128
   Print c128
   Print a129
   Print b129
   Print c129
   Print a130
   Print b130
   Print c130
   Print a131
   Print b131
   Print c131
   Print a132
   Print b132
   Print c132
   Print a133
   Print b133
   Print c133
   Print a134
   Print b134
   Print c134
   Print a135
   Print b135
   Print c135
   Print a136
   Print b136
   Print c136
   Print a137
   Print b137
   Print c137
   Print a138
   Print b138
   Print c138
   Print a139
   Print b139
   Print c139
   Print a140
   Print b140
   Print c140
   Print a141
   Print b141
   Print c141
   Print a142
   Print b142
   Print c142
   Print a143
   Print b143
   Print c143
   Print a144
   Print b144
   Print c144
   Print a145
   Print b145
   Print c145
   Print a146
   Print b146
   Print c146
   Print a147
   Print b147
   Print c147
   Print a148
   Print b148
   Print c148
   Print a149
   Print b149
   Print c149
   Print a150
   Print b150
   Print c150
   Print a151
   Print b151
   Print c151
   Print a152
   Print b152
   Print c152
   Print a153
   Print b153
   Print c153
   Print a154
   Print b154
   Print c154
   Print a155
   Print b155
   Print c155
   Print a156
   Print b156
   Print c156
   Print a157
   Print b157
   Print c157
   Print a158
   Print b158
   Print c158
   Print a159
   Print b159
   Print c159
   Print a160
   Print b160
   Print c160
   Print a161
   Print b161
   Print c161
   Print a162
   Print b162
   Print c162
   Print a163
   Print b163
   Print c163
   Print a164
   Print b164
   Print c164
   Print a165
   Print b165
   Print c165
   Print a166
   Print b166
   Print c166
   Print a167
   Print b167
   Print c167
   Print a168
   Print b168
   Print c168
   Print a169
   Print b169
   Print c169
   Print a170
   Print b170
   Print c170
   Print a171
   Print b171
   Print c171
   Print a172
   Print b172
   Print c172
   Print a173
   Print b173
   Print c173
   Print a174
   Print b174
   Print c174
   Print a175
   Print b175
   Print c175
   Print a176
   Print b176
   Print c176
   Print a177
   Print b177
   Print c177
   Print a178
   Print b178
   Print c178
   Print a179
   Print b179
   Print c179
   Print a180
   Print b180
   Print c180
   Print a181
   Print b181
   Print c181
   Print a182
   Print b182
   Print c182
   Print a183
   Print b183
   Print c183
   Print a184
   Print b184
   Print c184
   Print a185
   Print b185
   Print c185
   Print a186
   Print b186
   Print c186
   Print a187
   Print b187
   Print c187
   Print a188
   Print b188
   Print c188
   Print a189
   Print b189
   Print c189
   Print a190
   Print b190
   Print c190
   Print a191
   Print b191
   Print c191
   Print a192
   Print b192
   Print c192
   Print a193
   Print b193
   Print c193
   Print a194
   Print b194
   Print c194
   Print a195
   Print b195
   Print c195
   Print a196
   Print b196
   Print c196
   Print a197
   Print b197
   Print c197
   Print a198
   Print b198
   Print c198
   Print a199
   Print b199
   Print c199
   Print a200
   Print b200
   Print c200
   Print a201
   Print b201
   Print c201
   Print a202
   Print b202
   Print c202
   Print a203
   Print b203
   Print c203
   Print a204
   Print b204
   Print c204
   Print a205
   Print b205
   Print c205
   Print a206
   Print b206
   Print c206
   Print a207
   Print b207
   Print c207
   Print a208
   Print b208
   Print c208
   Print a209
   Print b209
   Print c209
   Print a210
   Print b210
   Print c210
   Print a211
   Print b211
   Print c211
   Print a212
   Print b212
   Print c212
   Print a213
   Print b213
   Print c213
   Print a214
   Print b214
   Print c214
   Print a215
   Print b215
   Print c215
   Print a216
   Print b216
   Print c216
   Print a217
   Print b217
   Print c217
   Print a218
   Print b218
   Print c218
   Print a219
   Print b219
   Print c219
   Print a220
   Print b220
   Print c220
   Print a221
   Print b221
   Print c221
   Print a222
   Print b222
   Print c222
   Print a223
   Print b223
   Print c223
   Print a224
   Print b224
   Print c224
   Print a225
   Print b225
   Print c225
   Print a226
   Print b226
   Print c226
   Print a227
   Print b227
   Print c227
   Print a228
   Print b228
   Print c228
   Print a229
   Print b229
   Print c229
   Print a230
   Print b230
   Print c230
   Print a231
   Print b231
   Print c231
   Print a232
   Print b232
   Print c232
   Print a233
   Print b233
   Print c233
   Print a234
   Print b234
   Print c234
   Print a235
   Print b235
   Print c235
   Print a236
   Print b236
   Print c236
   Print a237
   Print b237
   Print c237
   Print a238
   Print b238
   Print c238
   Print a239
   Print b239
   Print c239
   Print a240
   Print b240
   Print c240
   Print a241
   Print b241
   Print c241
   Print a242
   Print b242
   Print c242
   Print a243
   Print b243
   Print c243
   Print a244
   Print b244
   Print c244
   Print a245
   Print b245
   Print c245
   Print a246
   Print b246
   Print c246
   Print a247
   Print b247
   Print c247
   Print a248
   Print b248
   Print c248
   Print a249
   Print b249
   Print c249
   Print a250
   Print b250
   Print c250
   Print a251
   Print b251
   Print c251
   Print a252
   Print b252
   Print c252
   Print a253
   Print b253
   Print c253
   Print a254
   Print b254
   Print c254
   Print a255
   Print b255
   Print c255
   Print a256
   Print b256
   Print c256
   Print a257
   Print b257
   Print c257
   Print a258
   Print b258
   Print c258
   Print a259
   Print b259
   Print c259
   Print a260
   Print b260
   Print c260
   Print a261
   Print b261
   Print c261
   Print a262
   Print b262
   Print c262
   Print a263
   Print b263
   Print c263
   Print a264
   Print b264
   Print c264
   Print a265
   Print b265
   Print c265
   Print a266
   Print b266
   Print c266
   Print a267
   Print b267
   Print c267
   Print a268
   Print b268
   Print c268
   Print a269
   Print b269
   Print c269
   Print a270
   Print b270
   Print c270
   Print a271
   Print b271
   Print c271
   Print a272
   Print b272
   Print c272
   Print a273
   Print b273
   Print c273
   Print a274
   Print b274
   Print c274
   Print a275
   Print b275
   Print c275
   Print a276
   Print b276
   Print c276
   Print a277
   Print b277
   Print c277
   Print a278
   Print b278
   Print c278
   Print a279
   Print b279
   Print c279
   Print a280
   Print b280
   Print c280
   Print a281
   Print b281
   Print c281
   Print a282
   Print b282
   Print c282
   Print a283
   Print b283
   Print c283
   Print a284
   Print b284
   Print c284
   Print a285
   Print b285
   Print c285
   Print a286
   Print b286
   Print c286
   Print a287
   Print b287
   Print c287
   Print a288
   Print b288
   Print c288
   Print a289
   Print b289
   Print c289
   Print a290
   Print b290
   Print c290
   Print a291
   Print b291
   Print c291
   Print a292
   Print b292
   Print c292
   Print a293
   Print b293
   Print c293
   Print a294
   Print b294
   Print c294
   Print a295
   Print b295
   Print c295
   Print a296
   Print b296
   Print c296
   Print a297
   Print b297
   Print c297
   Print a298
   Print b298
   Print c298
   Print a299
   Print b299
   Print c299
   Print a300
   Print b300
   Print c300
   Print a301
   Print b301
   Print c301
   Print a302
   Print b302
   Print c302
   Print a303
   Print b303
   Print c303
   Print a304
   Print b304
   Print c304
   Print a305
   Print b305
   Print c305
   Print a306
   Print b306
   Print c306
   Print a307
   Print b307
   Print c307
   Print a308
   Print b308
   Print c308
   Print a309
   Print b309
   Print c309
   Print a310
   Print b310
   Print c310
   Print a311
   Print b311
   Print c311
   Print a312
   Print b312
   Print c312
   Print a313
   Print b313
   Print c313
   Print a314
   Print b314
   Print c314
   Print a315
   Print b315
   Print c315
   Print a316
   Print b316
   Print c316
   Print a317
   Print b317
   Print c317
   Print a318
   Print b318
   Print c318
   Print a319
   Print b319
   Print c319
   Print a320
   Print b320
   Print c320
   Print a321
   Print b321
   Print c321
   Print a322
   Print b322
   Print c322
   Print a323
   Print b323
   Print c323
   Print a324
   Print b324
   Print c324
   Print a325
   Print b325
   Print c325
   Print a326
   Print b326
   Print c326
   Print a327
   Print b327
   Print c327
   Print a328
   Print b328
   Print c328
   Print a329
   Print b329
   Print c329
   Print a330
   Print b330
   Print c330
   Print a331
   Print b331
   Print c331
   Print a332
   Print b332
   Print c332
   Print a333
   Print b333
   Print c333
   Print a334
   Print b334
   Print c334
   Print a335
   Print b335
   Print c335
   Print a336
   Print b336
   Print c336
   Print a337
   Print b337
   Print c337
   Print a338
   Print b338
   Print c338
   Print a339
   Print b339
   Print c339
   Print a340
   Print b340
   Print c340
   Print a341
   Print b341
   Print c341
   Print a342
   Print b342
   Print c342
   Print a343
   Print b343
   Print c343
   Print a344
   Print b344
   Print c344
   Print a345
   Print b345
   Print c345
   Print a346
   Print b346
   Print c346
   Print a347
   Print b347
   Print c347
   Print a348
   Print b348
   Print c348
   Print a349
   Print b349
   Print c349
   Print a350
   Print b350
   Print c350
   Print a351
   Print b351
   Print c351
   Print a352
   Print b352
   Print c352
   Print a353
   Print b353
   Print c353
   Print a354
   Print b354
   Print c354
   Print a355
   Print b355
   Print c355
   Print a356
   Print b356
   Print c356
   Print a357
   Print b357
   Print c357
   Print a358
   Print b358
   Print c358
   Print a359
   Print b359
   Print c359
   Print a360
   Print b360
   Print c360
   Print a361
   Print b361
   Print c361
   Print a362
   Print b362
   Print c362
   Print a363
   Print b363
   Print c363
   Print a364
   Print b364
   Print c364
   Print a365
   Print b365
   Print c365
   Print a366
   Print b366
   Print c366
   Print a367
   Print b367
   Print c367
   Print a368
   Print b368
   Print c368
   Print a369
   Print b369
   Print c369
   Print a370
   Print b370
   Print c370
   Print a371
   Print b371
   Print c371
   Print a372
   Print b372
   Print c372
   Print a373
   Print b373
   Print c373
   Print a374
   Print b374
   Print c374
   Print a375
   Print b375
   Print c375
   Print a376
   Print b376
   Print c376
   Print a377
   Print b377
   Print c377
   Print a378
   Print b378
   Print c378
   Print a379
   Print b379
   Print c379
   Print a380
   Print b380
   Print c380
   Print a381
   Print b381
   Print c381
   Print a382
   Print b382
   Print c382
   Print a383
   Print b383
   Print c383
   Print a384
   Print b384
   Print c384
   Print a385
   Print b385
   Print c385
   Print a386
   Print b386
   Print c386
   Print a387
   Print b387
   Print c387
   Print a388
   Print b388
   Print c388
   Print a389
   Print b389
   Print c389
   Print a390
   Print b390
   Print c390
   Print a391
   Print b391
   Print c391
   Print a392
   Print b392
   Print c392
   Print a393
   Print b393
   Print c393
   Print a394
   Print b394
   Print c394
   Print a395
   Print b395
   Print c395
   Print a396
   Print b396
   Print c396
   Print a397
   Print b397
   Print c397
   Print a398
   Print b398
   Print c398
   Print a399
   Print b399
   Print c399
   Print a400
   Print b400
   Print c400
   Print a401
   Print b401
   Print c401
   Print a402
   Print b402
   Print c402
   Print a403
   Print b403
   Print c403
   Print a404
   Print b404
   Print c404
   Print a405
   Print b405
   Print c405
   Print a406
   Print b406
   Print c406
   Print a407
   Print b407
   Print c407
   Print a408
   Print b408
   Print c408
   Print a409
   Print b409
   Print c409
   Print a410
   Print b410
   Print c410
   Print a411
   Print b411
   Print c411
   Print a412
   Print b412
   Print c412
   Print a413
   Print b413
   Print c413
   Print a414
   Print b414
   Print c414
   Print a415
   Print b415
   Print c415
   Print a416
   Print b416
   Print c416
   Print a417
   Print b417
   Print c417
   Print a418
   Print b418
   Print c418
   Print a419
   Print b419
   Print c419
   Print a420
   Print b420
   Print c420
   Print a421
   Print b421
   Print c421
   Print a422
   Print b422
   Print c422
   Print a423
   Print b423
   Print c423
   Print a424
   Print b424
   Print c424
   Print a425
   Print b425
   Print c425
   Print a426
   Print b426
   Print c426
   Print a427
   Print b427
   Print c427
   Print a428
   Print b428
   Print c428
   Print a429
   Print b429
   Print c429
   Print a430
   Print b430
   Print c430
   Print a431
   Print b431
   Print c431
   Print a432
   Print b432
   Print c432
   Print a433
   Print b433
   Print c433
   Print a434
   Print b434
   Print c434
   Print a435
   Print b435
   Print c435
   Print a436
   Print b436
   Print c436
   Print a437
   Print b437
   Print c437
   Print a438
   Print b438
   Print c438
   Print a439
   Print b439
   Print c439
   Print a440
   Print b440
   Print c440
   Print a441
   Print b441
   Print c441
   Print a442
   Print b442
   Print c442
   Print a443
   Print b443
   Print c443
   Print a444
   Print b444
   Print c444
   Print a445
   Print b445
   Print c445
   Print a446
   Print b446
   Print c446
   Print a447
   Print b447
   Print c447
   Print a448
   Print b448
   Print c448
   Print a449
   Print b449
   Print c449
   Print a450
   Print b450
   Print c450
   Print a451
   Print b451
   Print c451
   Print a452
   Print b452
   Print c452
   Print a453
   Print b453
   Print c453
   Print a454
   Print b454
   Print c454
   Print a455
   Print b455
   Print c455
   Print a456
   Print b456
   Print c456
   Print a457
   Print b457
   Print c457
   Print a458
   Print b458
   Print c458
   Print a459
   Print b459
   Print c459
   Print a460
   Print b460
   Print c460
   Print a461
   Print b461
   Print c461
   Print a462
   Print b462
   Print c462
   Print a463
   Print b463
   Print c463
   Print a464
   Print b464
   Print c464
   Print a465
   Print b465
   Print c465
   Print a466
   Print b466
   Print c466
   Print a467
   Print b467
   Print c467
   Print a468
   Print b468
   Print c468
   Print a469
   Print b469
   Print c469
   Print a470
   Print b470
   Print c470
   Print a471
   Print b471
   Print c471
   Print a472
   Print b472
   Print c472
   Print a473
   Print b473
   Print c473
   Print a474
   Print b474
   Print c474
   Print a475
   Print b475
   Print c475
   Print a476
   Print b476
   Print c476
   Print a477
   Print b477
   Print c477
   Print a478
   Print b478
   Print c478
   Print a479
   Print b479
   Print c479
   Print a480
   Print b480
   Print c480
   Print a481
   Print b481
   Print c481
   Print a482
   Print b482
   Print c482
   Print a483
   Print b483
   Print c483
   Print a484
   Print b484
   Print c484
   Print a485
   Print b485
   Print c485
   Print a486
   Print b486
   Print c486
   Print a487
   Print b487
   Print c487
   Print a488
   Print b488
   Print c488
   Print a489
   Print b489
   Print c489
   Print a490
   Print b490
   Print c490
   Print a491
   Print b491
   Print c491
   Print a492
   Print b492
   Print c492
   Print a493
   Print b493
   Print c493
   Print a494
   Print b494
   Print c494
   Print a495
   Print b495
   Print c495
   Print a496
   Print b496
   Print c496
   Print a497
   Print b497
   Print c497
   Print a498
   Print b498
   Print c498
   Print a499
   Print b499
   Print c499
   Print a500
   Print b500
   Print c500
End Function
func_context()

Funktioniert auch als Sub-Routine mit Gosub und ebenso mit Type-Fields.

Ich behaupte mit fester Überzeugung, dass du einen Fehler syntaktischer Art in deinem Code hast.
So sehr man sich auch über Fehler aufregt, die Faustregel ist: Der Compiler hat immer Recht.

Der Fehler liegt bei dir. Und solange du nicht einen Code lieferst, der das Gegenteil beweist, solltest du deinen Code noch einmal überprüfen.

Ich sehe ja ein, dass Compiler nicht fehlerfrei sind und schon gar nicht der Blitz3D-Compiler, was
Code: [AUSKLAPPEN]
Data ""++""

beweist. Aber dein Fehler klingt eher nach "Irgendwo etwas vergessen, was der Compiler erwartet und deshalb mittendrin abbricht". Falls du mir allerdings einen Code vorstellen kannst, der den Fehler reproduziert, ändere ich meine Meinung gerne.
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik
  • Zuletzt bearbeitet von E. Urbach am Do, Nov 12, 2009 21:34, insgesamt 2-mal bearbeitet
 

Krischan

BeitragDo, Nov 12, 2009 21:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Der Compiler hat immer Recht.


Und eine Fehlermeldung ist immer die gemeinste Rache deines Computers Sad (frei nach Murphys Computergesetze)

Casiopaya

Betreff: Re: An Holzchopf

BeitragFr, Nov 13, 2009 8:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Omenaton_2 hat Folgendes geschrieben:

B., Ganz, ganz häßlich wäre der Weg, daß ich gar keine neue Variablen definiere, sondern : ich springe zu dem Type Instanz des Musters. Ich kopiere den Wert dessen in meine beliebte "TempInt oder TempDeci, Temp$" Variablen. Dann springe ich zu der Type Instanz des neu erschaffenen Types (Neuer Container) und lese den Wert aus diesem Temp Variable ein.


Also davon rate ich dir dringend ab. Kein Mensch ist fähig bei mehreren hundert derart verwendeten Variablen den Überblick zu behalten. Du würdest binnen kürzester Zeit aufgeben müssen.

Insgesamt ist meine Meinung aus Erfahrungen mit anderen Sprachen (C#, Java, VB, Ada, C, PHP) und der Compilerbau-Vorlesung: Ja, es gibt so eine Variablen-Mengen Begrenzung, Exclamation Exclamation Exclamation aber die liegt mit Sicherheit nicht bei 500 Exclamation Exclamation Exclamation , sondern wenn, dann bei Werten wie 32.000, 64.000 etc.

Die Grundannahme von der du ausgehen solltest ist: Der Compiler funktioniert gemäß seiner Spezifikation, d.h. wenn du ihm gültigen Code gibst, erzeugt er daraus ein gültiges Kompilat.

Das darfst du nicht mit folgendem verwechseln: Wenn Der Compiler keine spezifische Fehlermeldung (z.B über einen Syntaxfehler) ausgibt, gibt es keine solche Fehler. Gerade beim Blitz-Compiler sind mir schon Dinge unterlaufen, die eigentlich ein starkes Stück sind. Weil man irgendwo in der 2000. Zeile ein Endif vergessen hat, labert der Compiler irgendwas über fehlende Deklarationen in einem anderen Modul...

Deshalb: Versuch deinen Code in mehrere Module zu zerlegen, die alle für sich genommen geprüft werden und funktionieren. Teile und Hersche, irgendwann wirst du den Fehler finden. Versuch dabei die Kopplung zwischen den Modulen möglichst gering zu halten, und den Zusammenhalt innerhalb der Module möglichst hoch.
 

Omenaton_2

BeitragFr, Nov 13, 2009 15:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Zu der These, daß der Fehler in meinem Code liegt und nicht an einer Variablenbegrenzung :

- Basicprogger,
du hast da 2000 Variablen. Ok, das geht, aber ich bin nach Schätzungen bei ungefähr 4000 Variablen (wenn ich die ca 3500 Type Fields als Locals mitberechne). Nur weil es bei 2000 noch geht, heißt es nicht, daß es bei sagen wir 5000 auch noch ginge.

Was den Fehler in Code angeht. Ich kann mir nicht vorstellen, daß das ein Syntax Fehler sein soll und logischer Fehler schon gar nicht.
Deswegen nicht, weil der Fehler NUR auftritt, wenn ich ab einer bestimmten Zeile noch weitere Variablen einführen will, sonst nicht.
Wenn das Programm ohne diese zusätzlichen Zeilen einwandfrei funktioniert, dann MUSS der Fehler (Falls das ein Syntax Fehler ist) in den neuen Zeilen drin sein. Ansonsten könnte es sein, daß in den neuen Zeilen an sich kein direkter Fehler ist, aber etwas, was einen Fehler an einer anderen Stelle in Code erst verursacht, in dem es plötzlich in Widerspruch zu etwas steht. Aber das kann in diesem Fall nicht sein, weil deise Zeilen so simpel und einheitlich aufgebaut sind, daß da sich kein Fehler verstecken kann. Es deutet alles sehr darauf hin, daß es sich hier um eine Variablenanzahlbegrenzung handelt.
(erinnere dich nur den Test den ich vorne beschrieben habe in dem ich eine Variable zuweise, den es schon gab und das geht, sobald ich aber den Variablennamen auf einen völlig neuen ersetze geht es nicht mehr. Egal was.


- BigBug
"Und 400 Felder in einem Type halte ich für total übertrieben.
...Stichworte: BlitzArrays in Types, Types in Types und Bitoperationen für Ja/Nein-Werte "

Es sind in der Wirklichkeit sogar ca 450 Felder, nur sind einige davon immer nur temporär in Gebrauch (Timer, Flags, etc) die nicht abgespeichert und geladen werden, weil sie Anfangs noch auf Null stehen können. Diese lasse ich auch in der neuen Copy Rutine raus, deshalb rede ich nur von 400.
Diese über 400 Felder sind nötig. Ich werde nicht anfangen aufzuzählen wofür alles die da sind, aber die sind nicht nur so zum Spaß da.
Anfangs waren es unter 100, dann so wie ich immer mehr und mehr Features eingebaut habe, wuchsen auch die Anforderungen an den Object Type und ein paar werden bestimmt noch hinzukommen. Solange bis man das nicht selber tatsächlich macht, kann man sich das nur schwer oder gar nicht vorstellen.

Types in Types, BlitzArrays, etc.
Ich habe schon geschrieben, daß man immer wieder vor die Wahl gestellt wird, wie man etwas programmiertechnisch löst und dabei muß man immer ein Kompromiß eingehen. Man kann selten alles haben. Bei einem sehr großen Projekt wie bei meinem (und ich habe auch schon die Erfahrung von dem Aufbauechtzeit Strategiespiel Vulpec Mutations hinter mir) ist es aus meiner Sicht essentiell wichtig, daß der Code so simple und übersichtlich und vor allem leicht verständlich wie nur möglich bleibt. Wenn es sein muß opfere ich diesem Zweck Performance und Code Länge.
Wenn ich anfange Types in Types zu benutzen und noch weiter, dann wird mein Code zu unverständlich.
Es geht darum, daß wenn ich mit dem Auge den Code durchscrolle, daß das möglichst schnell geht und ich mich dabei nicht übermäßig bemühen muß die Zeilen zu interprätieren.
Kompaktheit des Codes oder Sparen mit Speicher und Performance sind für mich nicht am Wichtigsten. Die zählen viel und wenn es geht mache ich alles so, daß es für die erwähnten Attributen günstig ist, aber die haben nicht die höchste Priorität.

Konkret zu der Sache mit den über 400 Felder Type des Static Objects (meist Gegnerschiffe).
Ich habe schon vor Jahren bevor ich es anfing darüber nachgedacht, ob ich den Type nicht lieber in 2 oder gar mehrere aufspalten sollte.
Ich könnte die Typ spezifische Variablen die bei allen Individuen des gleiche Types immer unverändert gleich sind in einem extra Typus Type zusammenfassen. Die Waffen werte (von denen es sehr viele gibt) vielleichtauch extra machen. Die Static Objects hätten dann nur noch die (immer noch viele) Variablen die sich ständig und individuell ändern können.

Wenn ich das so machen würde, (und nicht so wie es jetzt ist, daß alle relavanten Werte eines Static Objects in einem Type drin sind) dann hätte das einen einzigen guten Effekt : ich würde Speicher sparen, weil die sonst immer gleiche Type Felder nicht vielfach wiederholt für jedes Individum existieren müßten. Das wäre zugegeben nett.
Es würde aber nicht bedeuten, daß ich weniger unterschiedliche Variablen hätte. Die Anzahl der Variablen Typen würde sich nicht verändern, nur die Anzahl der einzelnen Instanzen dieser Variablen wäre geringer. Also würde mir das bei meinem momentanen Problem nicht helfen.

Aber, es hätte auch negative Folgen :
Wenn die Variablen einer logischen Einheit, eines Static Objectes (also meist eines Gegnerschiffes) in verschiedenen Types aufgeteilt zu finden sind, dann würde das bedeuten, daß ich jedes Mal (und das kommt sehr, sehr häufig vor) wenn ich einen bestimmen Static Object anspringe (oder alle in Loop wegen eines Checks durchgehe) auch gleichzeitig die dazu passenden andere Types (für Grund-Typus, Waffen Typus, etc) auch noch anspringen müßte. Das würde den Code weniger übersichtlich und länger machen. Es würde zusätzlich Gedenkzeit für mich kosten, die enstprechenden Stellen in Code zu deuten und die einzelnen Variablen gedanklich richtig einzuordnen.

Ich werde darüber noch nachdenken. Das ist eine Frage bei der die Entscheidung sehr schwer abzuwägen ist.
Hätte ich am Anfang schon gewußt, wie Viele Felder ich für ein Static Object brauchen werde, kann es gut sein, daß ich mich für die Aufspaltung entschieden hätte.
Das ist nichts, was ich einfach so ändern könnte. Dafür müßte ich schon jetzt sehr, sehr viel verändern. Das wäre extrem aufwendig. Aber trotzdem, noch machbar. Solange ich nicht anfange den Leveleditor zu machen, mache ich nur wenige Objekte rein, damit ich nicht zu viel verändern muß, wenn sich was ändert. Ich habe trotzdem schon jetzt ca 20 Objekte drin mit jeweils ca 450 Variablen. Es ist also ein erheblicher Aufwand.


- Casiopaya
"Also davon rate ich dir dringend ab. Kein Mensch ist fähig bei mehreren hundert derart verwendeten Variablen den Überblick zu behalten. Du würdest binnen kürzester Zeit aufgeben müssen. "

Nein, weil ich an der Stelle wo ich das machen würde nichts machen oder beachten muß. Da werden einfach nur die Variablen hin und herkopiert, sonst nichts. Da muß man nichts verstehen und mit diesem Code-Abschnitt brauche ich mach nach dem das einmal funktionierend drin ist nicht mehr zu beschäftigen. Das wird ein Inlcude, den ich ruhig vergessen kann.
Die 400 Variablen an sich sind für mich bewiesener Maßen kein Problem. Damit komme ich gut klar. Die haben alle einen vielsagenden Namen und sind sortiert und sind sind langsam so angewachsen, ich wurde mit denen nicht auf ein Mal konfrontiert.
  • Zuletzt bearbeitet von Omenaton_2 am Fr, Nov 13, 2009 16:30, insgesamt 2-mal bearbeitet

Gehe zu Seite 1, 2, 3, 4  Weiter

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group