stratagus-devel
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]