[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Stratagus-devel] Developing new units
From: |
Martin Renold |
Subject: |
Re: [Stratagus-devel] Developing new units |
Date: |
Sat, 23 Aug 2003 09:34:01 +0200 |
User-agent: |
Mutt/1.3.28i |
Hi,
On Tue, Aug 19, 2003 at 05:00:30PM -0700, C Ratchet wrote:
> What is required exactly to create a new unit? Is new C code always
> required, or can it be done thru CCL files completely?
No, C code is not required to add a unit. But there might be still some
hardcoded things if you want to add workers.
> Also, is there a primer on how CCL files work?
I think not. The language is scheme, google for 'scheme tutorial' if you
have no hint at all. It's used descriptively, almost without the
programming part. There is some docu in stratagus/doc/ccl, but it is
either autogenerated from the comments in the CCLs or partially obsolete.
Better just read the ccl files, there are comments. Adding a unit is not
too hard if you have the graphics and sound already, removing one is
a bit harder.
Below is a patch to data.aleona that adds a new unit called 'Testunit'
with the ballista images, which can be built in the alliance farm as long
as you control a guard tower. As you can see you have to add it to all
the buttons you want it to have.
FIXME: define unit groups and add lists together instead :)
Please keep in mind that ccl syntax changes weekly at the moment.
If you copy data.aleona, you'll have to keep it up-to-date.
> And, what graphics format is used?
Paletted PNG.
Some docu is at stratagus/doc/media.html, plus there is a tutorial about
creating a building sprite:
http://www.nongnu.org/stratagus/spritehowto.html
bye,
Martin
diff -u -r data.aleona/ccl/alliance/buttons.ccl
data.newunit/ccl/alliance/buttons.ccl
--- data.aleona/ccl/alliance/buttons.ccl Tue Aug 19 17:38:35 2003
+++ data.newunit/ccl/alliance/buttons.ccl Sat Aug 23 08:19:06 2003
@@ -45,7 +45,7 @@
unit-peasant-with-gold unit-peasant-with-wood unit-female-hero
unit-flying-angle unit-arthor-literios unit-knight-rider unit-wise-man
unit-man-of-light unit-white-mage unit-balloon
- unit-gryphon-rider unit-mage unit-critter
+ unit-gryphon-rider unit-mage unit-critter unit-testunit
alliance-group))
(define-button 'pos 2 'level 0 'icon 'icon-alliance-shield1
@@ -56,7 +56,7 @@
unit-peasant-with-gold unit-peasant-with-wood unit-female-hero
unit-flying-angle unit-arthor-literios unit-knight-rider unit-wise-man
unit-man-of-light unit-white-mage unit-balloon
- unit-gryphon-rider unit-mage unit-critter
+ unit-gryphon-rider unit-mage unit-critter unit-testunit
alliance-group))
(define-button 'pos 2 'level 0 'icon 'icon-alliance-shield2
@@ -65,7 +65,7 @@
'key "s" 'hint "~!STOP"
'for-unit '(unit-footman unit-knight unit-archer unit-paladin
unit-dwarves unit-ranger unit-ballista unit-arthor-literios
unit-knight-rider
- unit-wise-man unit-man-of-light))
+ unit-wise-man unit-man-of-light unit-testunit))
(define-button 'pos 2 'level 0 'icon 'icon-alliance-shield3
'action 'stop
@@ -73,7 +73,7 @@
'key "s" 'hint "~!STOP"
'for-unit '(unit-footman unit-knight unit-archer unit-paladin
unit-dwarves unit-ranger unit-ballista unit-arthor-literios
unit-knight-rider
- unit-wise-man unit-man-of-light))
+ unit-wise-man unit-man-of-light unit-testunit))
(define-button 'pos 3 'level 0 'icon 'icon-sword1
'action 'attack
@@ -82,7 +82,7 @@
unit-dwarves unit-ranger unit-ballista unit-peasant
unit-peasant-with-gold unit-peasant-with-wood unit-female-hero
unit-flying-angle unit-arthor-literios unit-knight-rider unit-wise-man
- unit-man-of-light unit-white-mage unit-gryphon-rider alliance-group))
+ unit-man-of-light unit-white-mage unit-gryphon-rider alliance-group
unit-testunit))
(define-button 'pos 3 'level 0 'icon 'icon-sword2
'action 'attack
@@ -90,7 +90,7 @@
'key "a" 'hint "~!ATTACK"
'for-unit '(unit-footman unit-knight unit-archer unit-paladin
unit-dwarves unit-ranger unit-ballista unit-arthor-literios
unit-knight-rider
- unit-wise-man unit-man-of-light))
+ unit-wise-man unit-man-of-light unit-testunit))
(define-button 'pos 3 'level 0 'icon 'icon-sword3
'action 'attack
@@ -98,7 +98,7 @@
'key "a" 'hint "~!ATTACK"
'for-unit '(unit-footman unit-knight unit-archer unit-paladin
unit-dwarves unit-ranger unit-ballista unit-arthor-literios
unit-knight-rider
- unit-wise-man unit-man-of-light))
+ unit-wise-man unit-man-of-light unit-testunit))
(define-button 'pos 3 'level 0 'icon 'icon-arrow1
'action 'attack
@@ -125,14 +125,14 @@
unit-dwarves unit-ranger unit-ballista unit-female-hero
unit-flying-angle unit-arthor-literios unit-knight-rider unit-wise-man
unit-man-of-light unit-gryphon-rider alliance-group
- unit-balloon))
+ unit-balloon unit-testunit))
(define-button 'pos 4 'level 0 'icon 'icon-alliance-patrol-land
'action 'patrol
'key "p" 'hint "~!PATROL"
'for-unit '(unit-footman unit-knight unit-archer unit-paladin
unit-dwarves unit-ranger unit-ballista unit-female-hero
unit-flying-angle unit-arthor-literios unit-knight-rider unit-wise-man
- unit-man-of-light unit-gryphon-rider alliance-group)) )
+ unit-man-of-light unit-gryphon-rider alliance-group unit-testunit)) )
(define-button 'pos 5 'level 0 'icon 'icon-alliance-stand-ground
'action 'stand-ground
@@ -141,18 +141,18 @@
unit-dwarves unit-ranger unit-ballista unit-female-hero
unit-flying-angle unit-arthor-literios unit-knight-rider unit-wise-man
unit-man-of-light unit-gryphon-rider alliance-group
- unit-alliance-submarine unit-battleship unit-alliance-destroyer))
+ unit-alliance-submarine unit-battleship unit-alliance-destroyer
unit-testunit))
(define-button 'pos 6 'level 0 'icon 'icon-alliance-attack-ground
'action 'attack-ground
'key "g" 'hint "ATTACK ~!GROUND"
- 'for-unit '(unit-ballista unit-battleship alliance-group))
+ 'for-unit '(unit-ballista unit-battleship alliance-group unit-testunit))
(define-button 'pos 9 'level 0 'icon 'icon-alliance-demolish
'action 'demolish
'key "d" 'hint "~!DEMOLISH"
'for-unit '(unit-footman unit-knight unit-archer unit-paladin
- unit-dwarves unit-ranger unit-ballista unit-gryphon-rider alliance-group))
+ unit-dwarves unit-ranger unit-ballista unit-gryphon-rider alliance-group
unit-testunit))
;; paladin specific actions ---------------------------------------------------
@@ -382,6 +382,11 @@
'action 'train-unit 'value 'unit-critter
'key "c" 'hint "TRAIN ~!CRITTER"
'for-unit '(unit-farm)) )
+
+(define-button 'pos 2 'level 0 'icon 'icon-ballista
+ 'action 'train-unit 'value 'unit-testunit
+ 'key "t" 'hint "TRAIN ~!TESTUNIT"
+ 'for-unit '(unit-farm))
(define-button 'pos 1 'level 0 'icon 'icon-peasant
'action 'train-unit 'value 'unit-peasant
Only in data.newunit/ccl/alliance: buttons.ccl~
diff -u -r data.aleona/ccl/alliance/units.ccl
data.newunit/ccl/alliance/units.ccl
--- data.aleona/ccl/alliance/units.ccl Tue Aug 19 17:38:36 2003
+++ data.newunit/ccl/alliance/units.ccl Sat Aug 23 08:11:37 2003
@@ -202,6 +202,37 @@
dead "explosion"
attack "ballista-attack"))
+(define-unit-type 'unit-testunit 'name "Testunit"
+ 'files '(tileset-summer "alliance/units/ballista.png")
+ 'size '(64 64)
+ 'animations 'animations-ballista 'icon 'icon-ballista
+ 'costs '(time 50 gold 50 wood 0)
+ 'speed 5
+ 'hit-points 10
+ 'draw-level 40
+ 'tile-size '(1 1) 'box-size '(63 63)
+ 'sight-range 5 'computer-reaction-range 11 'person-reaction-range 9
+ 'basic-damage 80 'piercing-damage 0 'missile 'missile-ballista-bolt
+ 'min-attack-range 1 'max-attack-range 8
+ 'weapons-upgradable 1
+ 'priority 70
+ 'points 100
+ 'demand 1
+ 'explode-when-killed
+ 'type-land
+ 'right-attack
+ 'can-ground-attack
+ 'can-attack
+ 'can-target-land 'can-target-sea
+ 'selectable-by-rectangle
+ 'sounds '(
+ selected "ballista-selected"
+ acknowledge "ballista-acknowledge"
+ ready "ballista-ready"
+ help "basic alliance voices help 1"
+ dead "explosion"
+ attack "ballista-attack"))
+
(define-unit-type 'unit-knight 'name "Knight"
'files '(tileset-summer "alliance/units/knight.png")
'size '(72 72)
Only in data.newunit/ccl/alliance: units.ccl~
diff -u -r data.aleona/ccl/alliance/upgrade.ccl
data.newunit/ccl/alliance/upgrade.ccl
--- data.aleona/ccl/alliance/upgrade.ccl Tue Aug 19 17:38:36 2003
+++ data.newunit/ccl/alliance/upgrade.ccl Sat Aug 23 08:21:57 2003
@@ -245,6 +245,7 @@
(define-allow 'unit-footman "AAAAAAAAAAAAAAAA")
(define-allow 'unit-peasant "AAAAAAAAAAAAAAAA")
(define-allow 'unit-ballista "AAAAAAAAAAAAAAAA")
+(define-allow 'unit-testunit "AAAAAAAAAAAAAAAA")
(define-allow 'unit-knight "AAAAAAAAAAAAAAAA")
(define-allow 'unit-archer "AAAAAAAAAAAAAAAA")
(define-allow 'unit-mage "AAAAAAAAAAAAAAAA")
@@ -345,6 +346,8 @@
'(unit-elven-lumber-mill))
(define-dependency 'unit-ballista
'(unit-alliance-blacksmith unit-elven-lumber-mill))
+(define-dependency 'unit-testunit
+ '(unit-alliance-guard-tower))
(define-dependency 'unit-knight
'(unit-stables unit-alliance-blacksmith))
(define-dependency 'unit-ranger