Custom Block- Shatter if no Sprites on screen

geschrieben am 13.01.2015 19:02:21
( Link )
Hallo Leute!

Ich bin mal wieder aktiv, und brauche einen Custom Block, der erstört wird, wenn alle Gegner auf dem Screen besiegt sind.

Dazu habe ich ganz einfach den Block von Teo17 "Pass if no Sprites on screen" verwendet und versucht, diesen zu verändern:
Ein Teil Original-Code des Blocks lautet:

Code
	LDA #$25	;If there are no sprites on the screen...
STA $1693 ;...then make the block passable.


Jetzt habe ich versucht, den Code mit STA einfach durch Folgendes zu ersetzen:
Code
%shatter_block()


Diesen Code hab ich jetzt aus anderen Shatter-Blocks, dort reicht das anscheinend aus, so wie ich das sehe? Was ich mir aber irgendwie nicht vorstellen kann.

Wie ich mir dachte, funktioniert das anscheinend nicht (BTSD gibt ne Fehlermeldung).
Muss ich sonst noch was ändern/hinzufügen?

Exits done: 42, Overworld: 80%

To do list: Castle #5... fast fertig... Danach gibts endlich die Demo
geschrieben am 13.01.2015 19:22:57
( Link )
Befehle mit % vorne dran sind Macros. Es reicht nicht, einfach nur den Aufruf zu kopieren, sondern du musst auch das eigentliche Macro kopieren, was irgendwo in der Datei stehen müsste.
So oder so wird es dann aber vermutlich noch nicht den Effekt haben, den du dir wünschst, sofern du einfach nur das STA überschreibst. Das LDA #$25 tut nichts weiter, als eine Konstante zu laden - nämlich $25. Wenn du direkt danach shatter_blocks() aufrufst, wird der Block vermutlich ganz unerwartet einfach irgendwann zersplittern. So wie ich das vermute hat das LDA #$25 erst in Kombination mit dem STA $1693 den Effekt, dass alle Gegner auf dem Bildschirm überprüft werden und dann irgendwas passiert. Hier bin ich mir aber nicht ganz sicher, da kennen sich andere besser aus.
-Das quadratische Rad neu erfinden-
Mit das quadratische Rad neu erfinden (englisch Reinventing the square wheel) bezeichnet man die Bereitstellung einer schlechten Lösung, wenn eine gute Lösung bereits existiert.

-Slowsort-
Slowsort (von engl. slow: langsam) ist ein langsamer, rekursiver Sortieralgorithmus, der nach dem Prinzip Vervielfache und kapituliere (engl. Multiply and surrender, eine Parodie auf Teile und herrsche) arbeitet.

geschrieben am 13.01.2015 20:12:08
( Link )
Diese Makros sind für das neue Tool GPS gedacht, das bringt die mit.

Wenn du zum Einfügen noch BTSD verwendest, probier's mal hiermit (keine Gewähr):

Code
db $42
JMP M : JMP M : JMP M
JMP R : JMP R : JMP R : JMP R
JMP M : JMP M ; : JMP M
M:
PHX
LDX #11
.loop
LDA $14C8,x
BNE .break
DEX
BPL .loop
.shatter
PHY
LDA #$02
STA $9C
JSL $00BEB0
PHB
LDA #$02
PHA
PLB
LDA #$00
JSL $028663
PLB
PLY
.break
PLX
R:
RTL


Wird allerdings erst was bewirken, wenn du den Block berührst - von selber zerbricht der nicht.
geschrieben am 13.01.2015 20:31:35
( Link )
Funktioniert perfekt.
Kann ich dann das noch so ändern, dass er automatischt zerspringt?
Muss zwar nicht unbedingt sein, wäre aber schön!
Danke euch auf jeden Fall!

Exits done: 42, Overworld: 80%

To do list: Castle #5... fast fertig... Danach gibts endlich die Demo
geschrieben am 13.01.2015 21:35:08
( Link )
Schön, dass es klappt.

Zitat von exit1337:
Kann ich dann das noch so ändern, dass er automatischt zerspringt?

Geht mit Blöcken leider nicht - Block-Code wird erst dann ausgeführt, wenn man den Block berührt. (Ein Block kann nur reagieren, wenn man so will, nicht agieren.)

Man könnte einen Sprite schreiben, der sich wie ein fester Block verhält und sich dann (von selbst) auflöst, wenn außer ihm selbst keine Sprites mehr da sind - aber aus Sprites bin ich gerade zu sehr raus.
geschrieben am 13.01.2015 22:59:02
( Link )
Verstehe. Gut, ich bin mit dem Block zufrieden, schließlich tut er das, was ich für mein nächstes Level haben will.

Exits done: 42, Overworld: 80%

To do list: Castle #5... fast fertig... Danach gibts endlich die Demo